2009-06-12 11 views
4

J'ai un datatable JSF avec un tas de lignes, chaque ligne ayant une selectOneMenu à l'intérieur de celui-ci comme ceci:Comment puis-je obtenir les valeurs d'un selectOneMenu dans une base de données JSF?

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

Cependant, je ne peux pas à comprendre comment obtenir le rôle sélectionné sur chaque row dans la méthode save. En d'autres termes, je veux enregistrer la valeur de chaque ligne. J'ai vu cet article qui explique comment enregistrer une zone de texte d'entrée:

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

mais il ne semble pas appliquer à l'h: selectOneMenu cas. Est-ce que quelqu'un a un exemple de code qui fait cela?

Merci!

Répondre

2

Je vois que votre table est reliée à votre grain de café. Dans votre bean, vous pouvez utiliser la méthode getDataTable() et y accéder. Java doc dit:

public Object getRowData() 

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

Donc, si vous faites votre code comme:

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

Vous pouvez ensuite accéder à tous les champs que l'utilisateur a choisi. Im utilisant ceci dans mon propre projet et son fonctionnement. La seule différence est que Im casting à mon propre type au lieu de List<String>

1

Il n'y a aucune erreur évidente dans le formulaire - si votre méthode de sauvegarde n'est pas invoquée, essayez d'ajouter une balise messages à votre formulaire pour vous aider à trouver la source du problème. Il serait utile si vous avez publié un exemple de bean reproduisant le problème et indiquant l'implémentation JSF et la version que vous utilisez.