2011-08-30 21 views
5

Tengo una tabla de datos en un jsf, ¿cómo puedo obtener todos los valores de esa tabla.DataTable en JSF

Aquí está mi mesa:

<h:dataTable id="dt1" value="#{Metadata.placeholders}" var="item" binding="#{Metadata.dataTable}" bgcolor="#F1F1F1" border="10" cellpadding="5" cellspacing="3" first="0" rows="4" width="40%" frame="hsides" rules="all" summary="This is a JSF code to create dataTable." > 

        <f:facet name="header"> 
         <h:outputText value="Select elements for available placeholder" /> 
        </f:facet> 

        <h:column> 
         <f:facet name="header"> 
          <h:outputText value="Placeholder" /> 
         </f:facet> 
         <h:outputText value="#{item.id}"/> 
        </h:column> 

        <h:column> 
         <f:facet name="header"> 
          <h:outputText value="Element"/> 
         </f:facet> 
         <h:selectOneListbox id="elements" size="1" > 
          <f:selectItems value="#{item.elements}" /> 
         </h:selectOneListbox> 
        </h:column> 

        <h:column> 
         <f:facet name="header"> 
          <h:outputText value="Value"/> 
         </f:facet> 
         <h:inputText></h:inputText> 
        </h:column> 

       </h:dataTable><br> 

Como se puede ver, la segunda y la tercera columna se cuadro de lista y de texto de entrada Felds, así que vamos a suponer que la tabla tiene 5 filas y el usuario seleccione un valor forman la listbox e ingrese un texto en el campo de texto, entonces, ¿cómo puedo obtener esos datos después de que el usuario presione el botón "enviar"?

+0

Esto podría ayudarle a http://stackoverflow.com/questions/988869/how-can-i-get-values-out-of-a-selectonemenu-inside-a-jsf-datatable – user219882

+0

Sí, Vi esta publicación, pero no funciona para mí. List selectedRowData = (List ) getDataTable(). GetRowData() esta paz de excepción de lanzamiento de código, y hasta donde veo el método getRowData() devuelve un objeto para una fila seleccionada actualmente ... – adgfs

+0

Y cómo se implementa el método getDataTable()? Debería devolver DataModel, que puede obtener de FacesContext. – user219882

Respuesta

5

Sólo se unen el valor desplegable a una propiedad del elemento actualmente iterado.

<h:dataTable value="#{metadata.placeholders}" var="placeholder"> 
    <h:column> 
     <h:selectOneMenu value="#{placeholder.element}"> 
      <f:selectItems value="#{placeholder.elements}" /> 
     </h:selectOneMenu> 
    </h:column> 
</h:dataTable> 
<h:commandButton value="Submit" action="#{metadata.submit}" /> 

(en cuenta que he arreglado el nonsensicial <h:selectOneListbox size="1"> por un <h:selectOneMenu>)

Al enviar el formulario, JSF acaba de establecer el valor de la propiedad element del Placeholder objeto repetido. Si tiene la intención de acceder a él individualmente, simplemente haga un círculo sobre placeholders en el método de acción.

public void submit() { 
    for (Placeholder placeholder : placeholders) { 
     System.out.println(placeholder.getElement()); // Look, JSF has already set it. 
    } 
} 
+0

Gracias BalusC, gran publicación! Ahora funciona. – adgfs

+0

De nada. – BalusC

+0

@BalusC, juro que he aprendido más sobre JSF aquí de usted en StackOverlow que de la documentación oficial. Gracias por compartir/participar. – fusion27

2

Es sólo un código de ejemplo, pero la idea debería estar ahí

for (int i = 0; i < getDataTable().getRowCount(); i++) { 
    getDataTable().setRowIndex(i); 
    Object object = getDataTable().getRowData(); 
} 
1

Su cuadro de lista y su inputText no sabe dónde (y cómo) para guardar sus valores. Por lo tanto, JSF generalmente tiene frijoles administrados y convertidores, y asigna los valores a través de valor-atributo.

Si no está seguro de cuál es el nombre de las propiedades, puede heredar dos hashmaps para pasar los valores. por ejemplo:

< ... value="#{Metadata.placeholderMap[item.id]['age']}" ... >