4

我有一个带有一堆行的 JSF 数据表,每一行里面都有一个 selectOneMenu,如下所示:

    <h:form 
      <h:dataTable id="myTable"
        binding="#{myBean.dataTable}"
        value="#{myBean.dataTableRows}" var="row"
        first="0" rows="0" dir="LTR" frame="hsides" rules="all">

        <h:column>
          <f:facet name="header">
            <h:outputText value="Sample Name" />
          </f:facet>
          <h:outputText value="#{row.sampleName}" />
        </h:column>

        <h:column>
          <f:facet name="header">
            <h:outputText value="Role" />
          </f:facet>
          <h:selectOneMenu value="#{row.role}"
            id="roleInput">
            <f:selectItems value="#{myBean.allRoles}" />
          </h:selectOneMenu>
        </h:column>

      </h:dataTable>

      <h:commandButton value="Save" action="#{myBean.save}" />
    </h:form>

但是,我似乎无法弄清楚如何从 save 方法的每一行中获取选定的角色。换句话说,我想保存每一行的值。我看到了这篇文章,它解释了如何保存输入文本框:

http://balusc.blogspot.com/2006/06/using-datatables.html#EditableDatatable

但它似乎不适用于 h:selectOneMenu 案例。有没有人有任何示例代码可以做到这一点?

谢谢!

4

2 回答 2

2

我看到您的表已绑定到您的 bean。在您的 bean 中,您可以使用 getDataTable() 方法并访问它。Java 文档说:

public Object getRowData()

Return the data object representing the data for the currently selected row index, if any.

因此,如果您执行以下代码:

List<String> selectedRowData = (List<String>) getDataTable().getRowData()

然后,您可以访问用户选择的所有字段。我在我自己的项目及其工作中使用它。唯一的区别是我投射到我自己的类型而不是List<String>

于 2009-06-17T06:24:07.380 回答
1

表单中没有明显的错误 - 如果您的保存方法没有被调用,请尝试在表单中添加消息标签以帮助追踪问题的根源。如果您发布了一个示例 bean 来重现问题并说明您正在使用的 JSF 实现和版本,那将会有所帮助。

于 2009-06-14T12:07:58.720 回答