2

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

4

0 回答 0