2009-06-12 8 views
4

Ich habe eine JSF Datentabelle mit einem Bündel von Zeilen, wobei jede Zeile in der es wie folgt ein selectOneMenu mit:Wie kann ich Werte aus einem selectOneMenu in einer JSF-Datentabelle erhalten?

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

Allerdings kann ich nicht scheinen, um herauszufinden, wie die ausgewählte Rolle aus jedem bekommen Zeile in der Speichermethode. Mit anderen Worten, ich möchte den Wert jeder Zeile speichern. Ich habe diesen Artikel, die erläutern, wie ein Texteingabefeld speichern:

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

aber es scheint nicht zu dem h anzuwenden: selectOneMenu Fall. Hat jemand einen Beispielcode, der das tut?

Danke!

Antwort

2

Ich sehe Ihre Tabelle hat eine Bindung zu Ihrer Bohne. In Ihrer Bean können Sie die Methode getDataTable() verwenden und darauf zugreifen. Java doc sagt:

public Object getRowData() 

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

Also, wenn Sie Ihren Code tun:

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

Sie dann die Felder alle der Benutzer gewählt hat, zugreifen können. Ich benutze dies in meinem eigenen Projekt und seiner Arbeit. Der einzige Unterschied ist, dass Im Casting zu meinem eigenen Typ statt List<String>

1

Es gibt keine offensichtlichen Fehler im Formular. Wenn Ihre Speichermethode nicht aufgerufen wird, fügen Sie Ihrem Formular einen messages-Tag hinzu, um die Ursache des Problems zu ermitteln. Es wäre hilfreich, wenn Sie eine Beispiel-Bean bereitstellen, die das Problem reproduziert und die verwendete JSF-Implementierung und -Version angibt.