选中该复选框后,应启用相应的输入文本。但是没有设置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>
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}" />
。那里没有,因为我认为没有相关性。