JSF datatTable java.lang.NumberFormatException:对于输入字符串:

时间:2016-08-02 12:26:51

标签: jsf datatable facelets

如何解决jsf datatable java.lang.NumberFormatException:对于输入字符串,请参阅下面的代码: 我有SelectItemDTO:

                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中输出[com.sfr.medusa.dto.SelectItemDTO@1d591889,com.sfr.medusa.dto.SelectItemDTO@62e36383]

现在我将对话框更改为:

    <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>                      

3 个答案:

答案 0 :(得分: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>

此代码导致相同的异常。当我用以下代码替换update属性时:

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

这个工作正常。

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

答案 1 :(得分:0)

好的,我找到了它(不是jsf或priemfaces的问题)。 问题是当我们使用composit传递parmetre时我们应该使用属性中的类型,当#string是这样的时候:

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

现在我打开这个可能还有其他问题:)

答案 2 :(得分:-1)

我在调试中前进我认为问题是: 可以在复合属性中传递datatable的值吗?

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