Estoy usando PrimeFaces DataTable para visualizar registros (generados aleatoriamente en una aplicación de recinto de seguridad). Estoy usando la versión de selección de casilla de verificación. El DataTable básico funciona perfectamente, incluidos los botones Eliminar y Cancelar (cuya funcionalidad solo está disponible en el diálogo de confirmación). Estoy intentando agregar funcionalidad al DataTable para que cuando se selecciona una casilla de verificación, otros controles en la página se habiliten o deshabiliten en función de la selección.PrimeFaces DataTable - necesito habilitar/deshabilitar componentes según la selección de fila
En otras palabras, si no se seleccionan filas (no hay casillas de verificación marcadas) ciertos botones y/o elementos del menú están deshabilitados o no se representan. Seleccionar una o más filas haciendo clic en la casilla de verificación debería habilitar o representar los controles. He intentado utilizar los controladores de eventos JavaScript incorporados, pero no puedo hacer que esto funcione.
Ahora mi página muestra una columna de DataTable 5: una columna de selección de casilla de verificación, Nombre, Apellido, Edad. Hice algo así en otro cajón de arena utilizando casillas booleanas simples y actualizando un booleano con el evento onclick. Desafortunadamente, no parece haber nada similar en este DataTable, o si no sé cómo implementarlo.
Mi página de índice:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.prime.com.tr/ui"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<body>
<ui:composition template="./newTemplate.xhtml">
<ui:define name="content">
<h:form>
<p:dataTable rowSelectListener="#{tableBean.onRowSelect}" var="data" value="#{tableBean.data}" paginator="true" rows="10"
selection="#{tableBean.selectedNames}">
<f:facet name="header">
Customer List
</f:facet>
<p:column selectionMode="multiple" />
<p:column headerText="Cust ID">
<h:outputText value="#{data.id}" />
</p:column>
<p:column headerText="First Name">
<h:outputText value="#{data.firstName}" />
</p:column>
<p:column headerText="Last Name">
<h:outputText value="#{data.lastName}" />
</p:column>
<p:column headerText="Age">
<h:outputText value="#{data.age}" />
</p:column>
<f:facet name="footer">
<p:commandButton update="deleteList" value="Delete" oncomplete="deleteDlg.show()" />
</f:facet>
</p:dataTable>
<p:dialog header="Delete Selected Records" modal="true" widgetVar="deleteDlg"
>
<h:outputText value="You are about to permanently delete records." /><br /><br />
<h:outputText value="Are you sure you want to continue?" /><br /><br/>
<h:commandButton value="CANCEL" action="#{tableBean.cancelDelete()}" /> <h:commandButton value="Delete" action="#{tableBean.deleteNames()}" />
</p:dialog>
</h:form>
</ui:define>
</ui:composition>
</body>
</html>
Código de mi bean de respaldo que puede ser relevante:
public void deleteNames()
{
for(Data person : selectedNames)
{
data.remove(person);
}
}
public void cancelDelete()
{
for(Data name : selectedNames)
selectedNames = null;
}
public void onRowSelect(SelectEvent event)
{
if(selectedNames == null || selectedNames.length < 1)
setDisable(true);
else
setDisable(false);
}
public boolean isDisable() {
if(selectedNames == null || selectedNames.length < 1)
disable = true;
else
disable = false;
return disable;
}
public void setDisable(boolean disable) {
this.disable = disable;
}
Bueno, lo único que he podido encontrar es abandonar las casillas de verificación. PrimeFaces tiene una opción de "selección instantánea" en la que hace clic en cualquier lugar de la fila de tabla de datos para seleccionarla. Usando esa opción, con selectionMode = "multiple", y cambiando mis CommandButtons de JSF estándar a PrimeFaces commandButtons, puedo activarlos y desactivarlos cuando las filas son seleccionadas o no seleccionadas. Todavía preferiría usar las casillas de verificación para la selección, pero eso no parece posible con una tabla de datos PrimeFaces. – Sean