When the checkbox is selected, the corresponding input text should be enabled. But the permit property is not set, nor updateRoles listener is called. I get no exceptions, no indication of something going wrong. I am using PrimeFaces 3.4, Mojarra 2.0.8.
<p:dataTable id="databases" var="database" value="#{mssqlAccDBAccess.databases}"
sortBy="#{database.name}" resizableColumns="false">
<p:column headerText="#{label.mssqlDatabasePermission}">
<p:selectBooleanCheckbox value="#{database.permit}"
disabled="#{not enabled}">
<p:ajax listener="#{mssqlAccDBAccess.updateRoles}" update="user" />
<f:attribute name="selectedRecord" value="#{database}" />
</p:selectBooleanCheckbox>
</p:column>
<p:column headerText="#{label.mssqlDatabaseName}"
sortBy="#{database.name}">
<h:outputText value="#{database.name}" />
</p:column>
<p:column headerText="#{label.mssqlDatabaseUser}">
<p:inputText id="user" disabled="#{not database.permit or not enabled}"
value="#{database.user}">
</p:inputText>
</p:column>
</p:dataTable>
Edit 1
The updateRoles method look like this:
public void updateRoles(AjaxBehaviorEvent event) {
SelectBooleanCheckbox permit = (SelectBooleanCheckbox) event.getComponent();
boolean checked = (Boolean) permit.getValue();
if (checked) {
Database database = (Database) permit.getAttributes().get("selectedRecord");
showRoles(database.getRoles());
} else {
hideRoles();
}
}
I've added <f:attribute name="selectedRecord" value="#{database}" />
. It was not present there because I didn't consider it relevant.