【问题标题】:<p:calendar Conversion Error Setting Value<p:日历转换错误设置值
【发布时间】:2014-03-30 01:12:35
【问题描述】:

我有两个日历,一个用于开始日期,一个用于结束日期。当我单击命令按钮触发方法updateAccount 时,我收到错误消息:

Conversion Error setting value 'Tue Feb 26 16:41:43 EST 2013' for 'null Converter'.Conversion Error setting value 'Tue Feb 26 16:41:43 EST 2013' for 'null Converter'.
Conversion Error setting value 'Tue Feb 25 16:41:43 EST 2014' for 'null Converter'.Conversion Error setting value 'Tue Feb 25 16:41:43 EST 2014' for 'null Converter'.

commandButton 应该使用选择菜单和日历中的值作为 SQL 查询的参数重新加载页面。分配给日历的值是日期类型。是否因为日历的输出是 String 类型并试图分配给 Date 类型的变量而导致此错误?从我在网上找到的示例中不需要转换器。这是不正确的吗?如果是这样,我该如何解决此错误消息。

我的 JSF 页面:

<f:metadata>
    <f:viewParam name="account" value="#{accountAnalysisBean.account}" />   
    <f:viewParam name="start" value="#{accountAnalysisBean.start}" />   
    <f:viewParam name="end" value="#{accountAnalysisBean.end}" />       
    <f:viewAction action="#{accountAnalysisBean.pullData}" /> 
</f:metadata>

<h:form>
    <p:panelGrid columns="6">
    <f:facet name="header"> 
    <p:selectOneMenu id="pickAccount" value="#{accountAnalysisBean.pickAccount}" required="true" >      
   <f:selectItems value="#{editAccountBean.allAccounts}" />                                 
        </p:selectOneMenu>
        <h:outputLabel value="Start Date: " />
        <p:calendar id="start" value="#{accountAnalysisBean.start}"  pattern="MM/dd/yyyy" navigator="true" />   
        <h:outputLabel value="End Date: " />
        <p:calendar id="end" value="#{accountAnalysisBean.end}" pattern="MM/dd/yyyy" navigator="true" />
        <p:commandButton value="Get Account" action="#{accountAnalysisBean.updateAccount}" > 
            <f:param name="start" value="#{accountAnalysisBean.start}"/>
            <f:param name="end" value="#{accountAnalysisBean.end}"/>    
            <f:param name="account" value="#{accountAnalysisBean.id}"/>
        </p:commandButton>
        </f:facet>
    </p:panelGrid>
</h:form>

我的豆子:

@ManagedBean
@ViewScoped
public class AccountAnalysisBean {

private String account = "";
private String id = "";
private String pickAccount = "";
private Date start;
private Date end;

//gettters and setters

public void pullData() {

    if (account != "") {

        //pull various fields from database given account value
    } else {    
        //set default null values
    }
}

public void updateAccount() {

fix = DAOFactory.getInstance("fix_site2.jdbc");
datalist = fix.getMyDataDAO();
id = datalist.findAccountID(pickAccount); //returns an ID from a DB given account selected from menu

ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
ec.redirect(ec.getRequestContextPath() + "/AccountAnalysis.xhtml?account=" + id + 
                "&start=" + start + "&end=" + end + "&includeViewParams=true");
}

//remained of code omitted for clarity

}

我正在使用 JSF 2.2 和 Primefaces 4

【问题讨论】:

    标签: jsf jsf-2 primefaces calendar converter


    【解决方案1】:

    你正在使用

    <f:viewParam name="start" value="#{accountAnalysisBean.start}" />   
    <f:viewParam name="end" value="#{accountAnalysisBean.end}" /> 
    

    这些属性是Date 对象,而请求参数是Strings,所以你需要一个转换器。

    <f:viewParam name="start" value="#{accountAnalysisBean.start}" converter="javax.faces.DateTime">
    

    应该可以。

    信用:JSF 2.0: &lt;f:viewParam&gt; and default converters

    【讨论】:

    • 谢谢米歇尔。这解决了该错误消息,但是我现在收到j_idt2: 'Wed Feb 27 09:11:55 EST 2013' could not be understood as a date. 我需要做其他事情吗?初始页面加载的默认值为private Date start = new DateTime().minusMonths(12).toDate();。单击命令按钮后,我收到此错误。
    • @Steve - 您仍然需要为转换器指定格式,因为默认格式是“MON dd, YYYY”。请改用&lt;f:dateTimeConverter/&gt; 表示法,这样您就可以定义格式
    • @kolossus 我会在 组件中添加 &lt;f:viewParam name="start" value="#{accountAnalysisBean.start}"&gt;&lt;f:convertDateTime type="date" pattern="MM/dd/yyyy" /&gt;&lt;/f:viewParam&gt;?当我这样做时,我收到了同样的错误。
    • @Steve - 您应该将模式与您收到的参数的模式相匹配。所以在你的情况下,试试EEE MMM d HH:mm:ss Z yyyy
    猜你喜欢
    • 2014-10-15
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多