如何解决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>
答案 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}"