Auswählen von Zeilen in JSF mit primefaces
Ich habe einige Schwierigkeiten beim Versuch, wählen Sie einzelne Zeilen in einer datatable (ich kann nicht herausfinden, was Los ist, denn mein code basiert auf der primefaces-showcase).
Dem Tisch ist gefüllt, die erste mit dem Ergebnis übereinstimmt, dann versuche ich, um eine Zeile zu wählen, und schließlich zu versuchen zu tun, einige Prozess. Das problem erscheint, wenn ich versuche zu verarbeiten, dass eine einzige Zeile, keine der aktuellen Methoden seines Wesens genannt.
<h:form id="form2">
<p:dialog header="Agregar Producto" widgetVar="dlgAgregarProducto" modal="true" width="800" height="300">
<h:outputText value="Código"/>
<h:inputText value="#{promocionController.strIdProducto}"/>
<h:outputText value="Nombre"/>
<h:inputText value="#{promocionController.strNombre}"/>
<p:commandButton id="btnBuscarProducto" value="Buscar" action="#{promocionController.buscarProductosIdNombre}" update="tableBusqueda"/>
<p:commandButton id="btnAgregarProducto" value="Agregar" action="#{promocionController.agregarProductos}" />
<p:dataTable id="tableBusqueda" var="prod" value="#{promocionController.obtenerProductos()}"
rowKey="#{prod.idProducto}" selection="#{promocionController.arrProductosSeleccionados}" selectionMode="single">
<p:column style="width:24%">
<f:facet name="header">
<h:outputText value="Código"/>
</f:facet>
<h:outputText value="#{prod.idProducto}"/>
</p:column>
<p:column style="width:24%">
<f:facet name="header">
<h:outputText value="Foto"/>
</f:facet>
<h:outputText value="foto"/>
</p:column>
<p:column style="width:24%">
<f:facet name="header">
<h:outputText value="Descripción"/>
</f:facet>
<h:outputText value="#{prod.descripcion}"/>
</p:column>
<p:column style="width:24%">
<f:facet name="header">
<h:outputText value="Marca"/>
</f:facet>
<h:outputText value=""/>
</p:column>
<p:column style="width:24%">
<f:facet name="header">
<h:outputText value="Modelo"/>
</f:facet>
<h:outputText value="#{prod.modelo}"/>
</p:column>
<p:column style="width:24%">
<f:facet name="header">
<h:outputText value="Precio"/>
</f:facet>
<h:outputText value="#{prod.precio}"/>
</p:column>
</p:dataTable>
</p:dialog>
</h:form>
Backing-bean:
@ManagedBean(name = "promocionController")
@SessionScoped
public class PromocionCO {
arrProductosPromocion = new ArrayList<Producto>();
arrProductosSeleccionados = new ArrayList<Producto>();
}
public void buscarProductosIdNombre() {
productoDAO = new ProductoDAO();
arrProductosBusqueda = new ArrayList<Producto>();
arrProductosSeleccionados = new ArrayList<Producto>();
//si la búsqueda es por nombre
if (strIdProducto.compareTo("") == 0) {
arrProductosBusqueda = productoDAO.obtenerProductosPorNombre(strNombre);
} //si la búsqueda es por id
else {
producto = productoDAO.obtenerProductoPorId(strIdProducto);
if (producto != null) {
arrProductosBusqueda.add(producto);
} else {
arrProductosBusqueda = null;
}
}
}
public void agregarProductos() {
for (int i = 0; i < arrProductosSeleccionados.size(); i++) {
arrProductosPromocion.add(arrProductosSeleccionados.get(i));
}
}
public ArrayList<Producto> obtenerProductos() {
return arrProductosBusqueda;
}
public ArrayList<Producto> getArrProductosSeleccionados() {
return arrProductosSeleccionados;
}
public void setArrProductosSeleccionados(ArrayList<Producto> arrProductosSeleccionados) {
if (arrProductosSeleccionados != null) {
this.arrProductosSeleccionados = arrProductosSeleccionados;
}
}
- Die vollständige xhtml-und auch die backing-bean würde anderen zu helfen, Antworten auf diese
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, weil Ihre
selection
- Attribut verweist auf eineArrayList
vonProducto
anstelle von einem einzigen element. Da benutzen Sie eine Datentabelle mitselectionMode="single"
dieselected
Attribut sollte zeigen Sie ein einzelnes element in Ihrem backing-bean:Schließlich, geben Sie dieses element in Ihrem dataTable
selection
:Nun nach Auswahl einer Zeile der
public void setSelectedProducto(Producto producto)
- Methode aufgerufen werden.Unabhängig von dem konkreten problem, es ist mehr vorzuziehen, verwenden Sie die get - /Set-Methoden, wenn er zeigt auf einen Wert in der backing-bean:
In der Regel, eine entsprechende getter - /setter sollten sieht aus wie
get<NameOfTheObject>
, in Ihrem Fall: