チェックボックスを選択すると、対応する入力テキストが有効になります。ただし、permitプロパティは設定されておらず、updateRolesリスナーも呼び出されません。例外はなく、何か問題が発生している兆候もありません。PrimeFaces 3.4、Mojarra2.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>
編集1
updateRolesメソッドは次のようになります。
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();
}
}
追加しまし<f:attribute name="selectedRecord" value="#{database}" />
た。関連性があるとは思わなかったので、そこにはありませんでした。