【问题标题】:NumberFormatException: For input string: After dataTable multiple selectionNumberFormatException:对于输入字符串:dataTable 多选后
【发布时间】:2014-07-30 18:46:08
【问题描述】:

我正在开发一个 Primefaces 5 应用程序,在将我的一些 dataTable 视图从单选更改为多选之后......每当我尝试修改行的内容时,我都会收到此错误:

Jul 30, 2014 9:36:38 PM com.sun.faces.lifecycle.ProcessValidationsPhase execute
WARNING: For input string: "get"
java.lang.NumberFormatException: For input string: "get"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at javax.el.ListELResolver.coerce(ListELResolver.java:174)
at javax.el.ListELResolver.getValue(ListELResolver.java:52)
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.getTarget(AstValue.java:121)
at org.apache.el.parser.AstValue.getType(AstValue.java:82)
at org.apache.el.ValueExpressionImpl.getType(ValueExpressionImpl.java:176)
at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:98)
at org.primefaces.util.ComponentUtils.getConverter(ComponentUtils.java:126)
at org.primefaces.renderkit.InputRenderer.getConvertedValue(InputRenderer.java:171)
at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1034)
at javax.faces.component.UIInput.validate(UIInput.java:964)
at javax.faces.component.UIInput.executeValidate(UIInput.java:1237)
at javax.faces.component.UIInput.processValidators(UIInput.java:702)

这真的开始困扰我,因为我不知道出了什么问题......

这是数据表标题:

<p:dataTable id="ordDataTable" var="r" rowIndexVar="rowIndex"
value="#{ordController.lazyModel}" rows="10"
widgetVar="dtWidgetVar" paginator="true"
paginatorTemplate="
                   {CurrentPageReport} {FirstPageLink} {PreviousPageLink} 
                   {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="10,15,50,100,500,1000"
filteredValue="#{ordController.filteredList}"
selection="#{ordController.selectionList}"
filterMap="#{ordersFilterBackingBean.filterMap}"
selectionMode="multiple" lazy="true" sortOrder="ascending"
resizableColumns="true" tableStyle="width:auto">

这就是我进行更改的地方:

            <!-- Dialog for updating an EXISTING Order -->
        <p:dialog header="#{msgs.CRUD_dlgModify}" widgetVar="CRUD_updateDlg"
            resizable="false" id="CRUD_update">
            <p:outputPanel id="updatePanel">
                <h:form id="updateOrd">
                    <p:panelGrid columns="2">
                        <p:panelGrid columns="2">
                        #{msgs.Column_order_id}
                        <p:inputText
                                value="#{ordController.selectionList.get(0).order_id}" disabled="true" />
                        #{msgs.Column_inherited_id}
                        <p:inputText
                                value="#{ordController.selectionList.get(0).inherited_id}" />

                        #{msgs.Column_start_time}*
                        <p:calendar
                                value="#{ordController.selectionList.get(0).start_time}"
                                pattern="MM/dd/yyyy HH:mm" />

                        #{msgs.Column_priority}*
                         <h:selectOneMenu
                                value="#{ordController.selectionList.get(0).priority}">
                                <f:selectItems value="#{ordController.priorityList}" var="v"
                                    itemLabel="#{v.t2}" itemValue="#{v.t1}" />
                            </h:selectOneMenu>

                        #{msgs.Column_agent}*
                            <h:selectOneMenu
                                value="#{ordController.selectionList.get(0).agent}">
                                <f:selectItems value="#{ordController.agentList}" var="v"
                                    itemLabel="#{v.t2}" itemValue="#{v.t1}" />
                            </h:selectOneMenu>
                        #{msgs.Column_observations}
                        <p:inputText
                                value="#{ordController.selectionList.get(0).observations}" />
                        </p:panelGrid>

                        <p:panelGrid columns="2">
                            #{msgs.Column_order_id_ext}
                            <p:inputText
                                value="#{ordController.selectionList.get(0).order_id_ext}" />

                            #{msgs.Column_order_no}*
                            <p:inputText
                                value="#{ordController.selectionList.get(0).order_no}" />

                            #{msgs.Column_stop_time}*
                            <p:calendar
                                value="#{ordController.selectionList.get(0).stop_time}"
                                pattern="MM/dd/yyyy HH:mm" />

                             #{msgs.Column_client_id}*
                               <h:selectOneMenu
                                value="#{ordController.selectionList.get(0).client_id}">
                                <f:selectItems value="#{ordController.clientIDList}" var="v"
                                    itemLabel="#{v.t2}" itemValue="#{v.t1}" />
                            </h:selectOneMenu>                               
                             #{msgs.Column_truck_plate}
                             <p:inputText
                                value="#{ordController.selectionList.get(0).truck_plate}" />
                        </p:panelGrid>

                    </p:panelGrid>
                    <p:commandButton value="#{msgs.CRUD_btnSubmit}"
                        actionListener="#{ordController.updateOrd}"
                        oncomplete="PF('CRUD_updateDlg').hide()"
                        update=":form:ordDataTable :form:messages" />
                </h:form>
            </p:outputPanel>
        </p:dialog>

不认为这是相关的,但有人可能会问...

  public void updateOrd() {
if (selectionList.size() == 0 || selectionList.size() > 1) {
  FacesUtils.addErrorMessage(ResourceBundleUtils.getMessage(IBundleMsgs.NO_ROW_SELECTED));
} else {
  Orders order = selectionList.get(0);
  Map<String, Object> paramMap = new HashMap<String, Object>();
  selectionList.get(0).setStart_time_char(DateUtils.DateToString(selectionList.get(0).getStart_time()));
  selectionList.get(0).setStop_time_char(DateUtils.DateToString(selectionList.get(0).getStop_time()));
  paramMap.put("p_order_id", order.getOrder_id());
  ...params....
  SQLResult result = ordServ.updateOrders(paramMap);
  if (result.isOk()) {
    FacesUtils.addMessage(result.getResultMessage());
  } else {
    FacesUtils.addErrorMessage(result.getResultMessage());
  }
}

}

【问题讨论】:

  • 我原以为您在 xhtml 中的任何地方都需要 selectionList[0],但没有经验... :-(
  • @JaqenH'ghar 谢谢,伙计……就是这样。将其发布为 asnwer,以便我可以将其标记为正确 :)
  • 酷,很高兴它成功了 :-)

标签: jsf primefaces datatable


【解决方案1】:

在表达式语言中,对列表的索引是通过

listName[i]

而不是普通的java语法

listName.get(i)

第一个元素仍在索引 0 处。

【讨论】:

  • Wtf,当我在父窗口中调用 get() 时,我在关闭模态对话框时遇到了这个异常,但仅在关闭模态子对话框时才出现。在那之前,父对话运行良好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-21
  • 1970-01-01
  • 2021-03-20
  • 1970-01-01
  • 2019-02-03
相关资源
最近更新 更多