【问题标题】:Exception thrown while accessing HTML DataTable in backing bean访问支持 bean 中的 HTML DataTable 时引发异常
【发布时间】:2009-07-03 10:09:21
【问题描述】:

我正在使用 CrUD 功能在 JSF 中构建一个简单的应用程序。我正在尝试使用 tomahawk 组件实现编辑功能。我无法在我的支持 bean 中检索 selected 行。

这是我的 JSP 文件片段:

       <t:dataTable id="data"
          binding="#{selectOneRowList.dataTable}"
            styleClass="scrollerTable"
            headerClass="standardTable_Header"
            footerClass="standardTable_Header"
            rowClasses="standardTable_Row1,standardTable_Row2"
            columnClasses="standardTable_Column,standardTable_ColumnCentered,standardTable_Column"
            var="car"
            value="#{selectOneRowList.list}"
            sortColumn="#{selectOneRowList.sortColumn}"
            sortAscending="#{selectOneRowList.sortAscending}"
            preserveDataModel="false"
            preserveSort="true"
            preserveRowStates="true"
            rows="10"
       >
       <h:column>
           <f:facet name="header">
               <h:outputText value="Select"/>
           </f:facet>
           <t:selectOneRow  groupName="selection" id="hugo" value="#{selectOneRowList.selectedRowIndex}"
                   onchange="submit();" immediate="true"
                   valueChangeListener="#{selectOneRowList.processRowSelection}"/>
       </h:column>

       <h:column>
           <f:facet name="header">
           </f:facet>
           <h:outputText value="#{car.id}" />
       </h:column>

       <h:column>
           <f:facet name="header">
              <h:outputText value="Cars" />
           </f:facet>
           <h:outputText value="#{car.type}" />
       </h:column>

       <t:column sortable="true">
           <f:facet name="header">
              <h:outputText value="Color" />
            </f:facet>
           <h:outputText value="#{car.color}" />
       </t:column>

    </t:dataTable>

这是我的支持 bean SelectOneRowList.java :

     public void editCar(ActionEvent event) {
    System.out.println("Row number ## " + _selectedRowIndex.toString() + " selected!");
    System.out.println("Datatable ::"+ dataTable);              
    System.out.println("Row Count ::" + dataTable.getRowCount());
    dataItem = (SimpleCar) getDataTable().getRowData();

    //selectedCar = (SimpleCar)  _list.get(Integer.parseInt(_selectedRowIndex.toString()));
    selectedCar = (SimpleCar) dataTable.getRowData();

    System.out.println(dataTable.getRowData());
}

我的 DTO{Data Transfer Object} 是 SimpleCar.java 包含变量 ID、类型、颜色及其各自的 setter/getter。

dataItem 变量的类型为“SimpleCar”。 dataTable 是 HTMLDataTable 类型。我能够获得前 3 个 SOP,但未打印第 4 个 SOP。我在服务器上收到以下异常:

javax.faces.el.E​​valuationException:调用表达式时出现异常 #{selectOneRowList.editCar} org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:156) javax.faces.component.UICommand.broadcast(UICommand.java:89) javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:97) javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:171) org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32) org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:95) org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:70) javax.faces.webapp.FacesServlet.service(FacesServlet.java:139) org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:341)

单击编辑按钮时,将调用我的支持 bean 中的 editCar 方法。我需要在我的支持 bean 中获取所选行的数据。为什么会出现异常?

以上示例取自网站上分发的 tomawhawk 示例 WAR。我浏览了许多链接,包括BalusC 上的链接,但没有一个有帮助。

问候,

【问题讨论】:

    标签: jsf


    【解决方案1】:

    要使用DataTable.getRowData(),您必须将绑定到editCar() 的按钮放在数据表中。所以,在你的 JSP 上就需要再添加一列,比如:

    ...
       <t:column sortable="true">
           <f:facet name="header">
              <h:outputText value="Color" />
            </f:facet>
           <h:outputText value="#{car.color}" />
       </t:column>
    
       <t:column sortable="false">
           <h:commandButton value="Edit" action="#{selectOneRowList.editCar}" />
       </t:column>
    
    
    </t:dataTable>
    

    【讨论】:

      猜你喜欢
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 2015-12-08
      • 1970-01-01
      • 1970-01-01
      • 2013-12-04
      • 1970-01-01
      • 2017-01-17
      相关资源
      最近更新 更多