views:

2370

answers:

2

Hi, I have a JSF datatable with a bunch of rows, with each row having a selectOneMenu inside of it like this:

    <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>

However, I can't seem to figure out how get the selected role out of each row in the save method. In other words, I want to save each row's value. I saw this article, which explains how to save an input text box:

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

but it doesn't seem to apply to the h:selectOneMenu case. Does anyone have any example code that does this?

Thanks!

A: 

There are no obvious errors in the form - if your save method is not being invoked, try adding a messages tag to your form to help track down the source of the problem. It would help if you posted a sample bean that reproduces the problem and state the JSF implementation and version you are using.

McDowell
A: 

Hey!

I see your table has binding to your bean. In your bean you can use the getDataTable() method and access it. Java doc says:

public Object getRowData()

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

So if you do your code like:

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

You can then access all the fields the user has chosen. Im using this in my own project and its working. The only difference is that Im casting to my own type instead of List<String>

ChrisAD