选中复选框时,应启用相应的输入文本。但是没有设置 permit 属性,也没有调用 updateRoles 监听器。我没有例外,没有迹象表明出了什么问题。我正在使用 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>
编辑 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}" />
. 它在那里不存在,因为我认为它不相关。