2016-08-02 120 views
0

如何解决JSF的数据表java.lang.NumberFormatException:对于输入字符串,在波纹管我的代码: 我有SelectItemDTO:JSF datatTable java.lang.NumberFormatException:对于输入字符串:

   public class SelectItemDTO implements Serializable { 
       private static final long serialVersionUID = 1L; 
       private Object value; 
       private String label; 
       public SelectItemDTO() { 
       } 
       public SelectItemDTO(Object value, String label) { 
        this.value = value; 
        this.label = label; 
       } 
       public Object getValue() { 
        return value; 
       } 
       public void setValue(Object value) { 
        this.value = value; 
       } 
       public String getLabel() { 
        return label; 
       } 
       public void setLabel(String label) { 
        this.label = label; 
       } 

      } 

我dialog.xhtml我有:

    <p:dialog id="#{cc.attrs.widgetVar}" widgetVar="#{cc.attrs.widgetVar}" resizable="true" responsive="true" modal="true" appendTo="@(body)" height="580" width="850" dynamic="true"> 
        <h:form> 
         <p:fieldset> 
          <p:panel header="Ajout d'une nouvelle règle"> 
           #{cc.attrs.value.parametres} 
          </p:panel> 
         </p:fieldset> 
        </h:form> 
        </p:dialog> 

当我运行我的应用程序有输出dialog.xhtml [[email protected][email protected] ]

现在,当我的对话框更改为:

<p:dialog id="#{cc.attrs.widgetVar}" widgetVar="#{cc.attrs.widgetVar}" resizable="true" responsive="true" modal="true" appendTo="@(body)" height="580" width="850" dynamic="true"> 
      <h:form> 
       <p:fieldset> 
        <p:panel header="Ajout d'une nouvelle règle"> 
         <p:dataTable value="#{cc.attrs.value.parametres}" var="par" emptyMessage="#{msg['datatable.msg.empty']}"> 
           <p:column headerText="Param"> 
            <h:outputText value="#{par.label}" /> 
           </p:column> 

           <p:column headerText="Value"> 
            <h:inputText value="#{par.value}" /> 
           </p:column> 
         </p:dataTable> 
        </p:panel> 
       </p:fieldset> 
      </h:form> 
    </p:dialog> 

我有一个例外:

  java.lang.NumberFormatException: For input string: "parametres" 
      at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
      at java.lang.Integer.parseInt(Integer.java:580) 
      at java.lang.Integer.parseInt(Integer.java:615) 
      at javax.el.ListELResolver.coerce(ListELResolver.java:157) 
      at javax.el.ListELResolver.getValue(ListELResolver.java:70) 
      at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) 
      at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) 
      at org.apache.el.parser.AstValue.getValue(AstValue.java:169) 
      at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184) 
      at com.sun.faces.facelets.el.ContextualCompositeValueExpression.getValue(ContextualCompositeValueExpression.java:158) 
      at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) 
      at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194) 
      at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182) 
      at javax.faces.component.UIData.getValue(UIData.java:732) 
      at org.primefaces.component.api.UIData.getDataModel(UIData.java:764) 
      at org.primefaces.component.api.UIData.setRowModel(UIData.java:571) 
      at org.primefaces.component.api.UIData.setRowIndexWithoutRowStatePreserved(UIData.java:564) 
      at org.primefaces.component.api.UIData.setRowIndex(UIData.java:473) 
      at javax.faces.component.UIData.invokeOnComponent(UIData.java:1041) 
      at javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:1503) 
      at javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:718) 

与此代码我得到预期的结果,但不与数据表:

  <p:panelGrid class="ui-noborder" columns="2" cellpadding="5"> 
        <f:facet name="header"> 
         <p:row> 
          <p:column headerText="Paramètre" /> 
          <p:column headerText="Valeur" /> 
         </p:row> 
        </f:facet> 
        <c:forEach items="#{cc.attrs.value.parametres}" var="param"> 
         <p:row> 
          <p:column> 
           <p:outputLabel value="#{param.label}" /> 
          </p:column> 
          <p:column> 
           <p:inputText value="#{param.value}" /> 
          </p:column> 
         </p:row> 
        </c:forEach> 
       </p:panelGrid>      

回答

0

我与其他组件有相同的例外情况:

 <p:commandButton icon="ui-icon-check" value="#{msg['btn.add']}" onstart="PF('statusDialog').show()" oncomplete="PF('#{atWidgetVar}').hide();" actionListener="#{cc.attrs.actionListener}" update="#{cc.attrs.update}" > 
     </p:commandButton> 

此代码导致相同的异常。当我更换更新属性:

<f:ajax render="#{cc.attrs.update}"/> 

这一个工作正常。

我认为在datatable为空时,primefaces数据表有很多错误。

-1

我在调试中前进我认为问题是: 有可能传递数据表的值在复合属性中?

<ce:attribute name="value" required="true" /> 
<p:dataTable value="#{cc.attrs.value}" 
0

好吧,我发现它(不是jsf或priemfaces的问题)。 问题是,当我们使用组合大是#字符串这样的时候传球parmetre我们应该在属性使用类型:

<ce:attribute name="value" required="true" type="java.util.List"/> 

现在我让开这也许有其他问题:)

相关问题