如何为XMLGregorianCalendar创建JSF转换器

 我怀念的2502909393_663 发布于 2023-02-13 15:45

我使用JSF和RichFaces为我的SOAP Web服务创建了一个客户端.以下是我的观点:


    
        
            
            
                
                
                
                
                
                
            
            


下面是我的托管bean:

@ManagedBean(name = "userComplaintBean")
@RequestScoped
public class UserComplaintBean {
    UserComplaintVO userComplaintVO;
    UserComplaintWS userComplaintWS;
    UserComplaintWSImplService userComplaintWSImplService;

    private int id;
    private String appName;
    private String complaintDate;
    private String complaintDesc;
    private Date tentativeDate;

    public XMLGregorianCalendar getComplaintDate() throws DatatypeConfigurationException {
        XMLGregorianCalendar xgc = null;
        GregorianCalendar gc;
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = new Date();
        complaintDate = dateFormat.format(date);
        gc = (GregorianCalendar) GregorianCalendar.getInstance();
        gc.setTime(date);
        xgc = DatatypeFactory.newInstance().newXMLGregorianCalendar(gc);
        return xgc;
    }

    public void setComplaintDate(String complaintDate) {
        this.complaintDate = complaintDate;
    }

    /*
    public XMLGregorianCalendar getTentativeDate() throws DatatypeConfigurationException {
        XMLGregorianCalendar xgc = null;
        GregorianCalendar gc;
        String td;
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        
        td = dateFormat.format(tentativeDate);
        gc = (GregorianCalendar) GregorianCalendar.getInstance();
        gc.setTime(tentativeDate);
        xgc = DatatypeFactory.newInstance().newXMLGregorianCalendar(gc);
        return xgc;
    }

    public void setTentativeDate(Date tentativeDate) {
        this.tentativeDate = tentativeDate;
    }
    */

    public String save() throws DatatypeConfigurationException {
        userComplaintWSImplService = new UserComplaintWSImplService();
        userComplaintWS = userComplaintWSImplService.getUserComplaintWSImplPort();
        UserComplaintVO userComplaintVO = new UserComplaintVO();
        userComplaintVO.setAppName(getAppName());
        userComplaintVO.setComplaintDate(getComplaintDate());
        userComplaintVO.setComplaintDesc(getComplaintDesc());
        //userComplaintVO.setTentativeDate(getTentativeDate());
        userComplaintWS.userComplaintMethod(userComplaintVO);
        System.out.println("Complaint Saved...");
        return "Success";
    }
}

在这里,我正在complaintDate我需要转换为XMLGregorianCalendar格式化,我不能够做到这一点.

我怎样才能进行上述转换?

1 个回答
  • 你基本上犯了一个重大的设计错误.您不应该将特定于SOAP的模型混合到特定于JSF的模型中.该<rich:calendar>需要java.util.Date.您应该以这样的方式设计模型,以便准确提供视图所期望的内容.之后,您应该在处理JSF表单提交期间的业务服务方法中执行特定于SOAP的模型转换,以作为SOAP请求的准备.

    因此,理想情况下你应该使用:

    private Date copmlaintDate; // +getter+setter
    

    <rich:calendar value="#{userComplaintBean.complaintDate}" />
    

    然后在save()方法中

    GregorianCalendar gc = new GregorianCalendar();
    gc.setTime(complaintDate);
    XMLGregorianCalendar xgc = DatatypeFactory.newInstance().newXMLGregorianCalendar(gc);
    

    但是如果由于某些原因你真的有一个硬头,那么你总是可以按照以下方式破解它,因为你的环境支持EL 2.2(你的动作方法语法证实了这种情况):

    private XMLGregorianCalendar copmlaintDate; // +getter (no setter necessary!)
    

    <rich:calendar value="#{userComplaintBean.complaintDate.toGregorianCalendar().time}" />
    

    否则,您可以随时添加新的getter,返回具体java.util.Calendar实例:

    public Calendar getComplaintDateAsCalendar() {
        return complaintDate.toGregorianCalendar();
    }
    

    <rich:calendar value="#{userComplaintBean.complaintDateAsCalendar.time}" />
    

    2023-02-13 15:47 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有