Я использую DataTable PrimeFaces для отображения записей (случайно генерируемых в приложении песочницы). Я использую вариант выбора флажка. Основной DataTable отлично работает, включая кнопки «Удалить» и «Отмена» (какая функциональность доступна только в диалоговом окне подтверждения). Я пытаюсь добавить функциональность к DataTable, чтобы при выборе флажка другие элементы управления на странице были включены или отключены на основе выбора.PrimeFaces DataTable - нужно включить/отключить компоненты на основе выбора строки
Другими словами, если никакие строки не выбраны (флажки не отмечены) определенные кнопки и/или пункты меню отключены или не отображаются. Выбор одной или нескольких строк с помощью флажка должен включать или отображать элементы управления. Я попытался использовать встроенные обработчики событий JavaScript, но я не могу сделать эту работу.
В настоящее время на моей странице отображаются столбцы DataTable 5: столбец выбора флажка, имя, фамилия, возраст. Я сделал что-то вроде этой работы в другой песочнице, используя простые булевы флажки и обновляя логическое значение с событием onclick. К сожалению, похоже, что в этом DataTable ничего подобного не было, или если я не знаю, как его реализовать.
Мой индекс страницы:
<?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>
код из моего бэк-бобов, которые могут иметь отношение:
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;
}
Ну, единственная работа, с которой я смог придумать, - это отказаться от флажков. PrimeFaces имеет опцию «мгновенного выбора», в которой вы выбираете нужный файл в любом месте в строке данных. Используя эту опцию, с помощью selectionMode = "multiple" и меняя мои кнопки команд из стандартных JSF в командлеты PrimeFaces, я могу включать и выключать их, когда строки выбраны или не выбраны. Я бы предпочел использовать флажки для выбора, но это не представляется возможным с использованием данных PrimeFaces. – Sean