JSF数据表绑定不能正常工作



我正在创建一个简单的JSF应用程序,它只有一个JSP页面(1个下拉列表,1个数据表&1 .提交按钮)。

当我从下拉列表中选择值时,我用数组列表填充表来显示表数据。这个表是可编辑的。现在,当我点击提交,我需要得到整个表到一个列表。为此,我使用了datatable的绑定属性。但是问题是getValue返回null。

请帮我解决这个问题,我已经浪费了很多时间。
class UserBean {
..... 
private HtmlDataTable _dataTable;
  public void setDataTable(HtmlDataTable dataTable)
  {
    this._dataTable = dataTable;
  }
  public HtmlDataTable getDataTable()
  {
    return _dataTable;
  }
 ...................

public String submit() {
    List<User> userDetails = (ArrayList<User>)((HtmlDataTable)getDataTable()).getValue();
    System.out.println(userDetails);
    return "";
}
}

//JSP页面

<h:dataTable id="erdatatable"
                    var="row" value="#{UserBean.userDetails}"
                    binding="#{UserBean.dataTable}">
....
</h:dataTable>
<h:commandButton value="Submit" action="#{UserBean.submit}"></h:commandButton>
//faces.config

<managed-bean>
        <managed-bean-name>UserBean</managed-bean-name>
        <managed-bean-class>com.datatable.UserBean</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>

//web . xml

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
  </servlet-mapping>

您可以尝试将managed-bean作用域更改为session。当调用操作(下拉选择)并填充数据表时,UserBean类的请求范围结束。当您再次按下提交按钮时,将创建UserBean的一个新实例。

  1. 如果您只需要表中的数据,则根本不需要(也可能不应该)绑定它。您的userDetails将包含用户编辑的所有数据,而无需任何额外的工作。

  2. 如果你使用会话范围,你会有bug,只要有人打开你的应用程序在两个选项卡中,从下拉菜单中选择一些东西,然后按下第二个按钮。一个常见的解决方案是使用视图作用域(它不能很好地与绑定一起工作,但是-正如我所说-你根本不应该使用它)

相关内容

  • 没有找到相关文章

最新更新