1

我正在使用 JSF 2.0。我有两个复选框(都是 h:selectBooleanCheckBox)。要求是在单击第一个复选框时启用第二个复选框。代码如下所示:

<h:selectBooleanCheckbox  id="chkbox1" 
value="#{dataTableRow.employeeMBean.displayStatus}"
    onclick="updateDisplayStatus(this);return false;">
<a4j:ajax execute="chkbox1" render="chkbox1, chkbox2"></a4j:ajax>
</h:selectBooleanCheckbox>
<h:selectBooleanCheckbox  id="chkbox2" 
value="#{dataTableRow.employeeMBean.publicStatus}"
    disabled="#{!dataTableRow.employeeMBean.displayStatus}">
</h:selectBooleanCheckbox>

JS:

function updatePublicStatus(obj){   
    var currentValue = obj.checked;
    updatePublicStatusJS(currentValue);
    if(currentValue == true){
        document.getElementById("summaryForm:solutionsTable:"+solnDtIdx+":editPanel:0:chkbox2").disabled = "false";
    }
    else{
        document.getElementById("summaryForm:solutionsTable:"+solnDtIdx+":editPanel:0:chkbox2").disabled = "disabled";
    }
}

a4j:js函数

<a4j:jsFunction name="updatePublicStatusJS" action="#{employeeMBean.updatePublicStatus}"
 render="chkbox2">
<a4j:param name="param1" assignTo="#{dataTableRow.employeeMBean.displayStatus}"/>
</a4j:jsFunction>

有两个问题:

  1. 单击第一个复选框时未启用第二个复选框。
  2. 的动作a4j:jsFunction永远不会被调用。

我不确定为什么没有启用第二个复选框。如果需要更多代码或解释,请告诉我。

提前致谢。

4

1 回答 1

0

根本原因:<a4j:jsFunction>不需要。所以我删除了 onclick 并<h:selectBooleanCheckbox>使用<a4j:ajax execute="@this" render="chkbox2"/>. 这样,只要我选择第一个复选框,就会设置复选框值,并且第二个复选框使用更新的值呈现(因为“渲染”属性)。

于 2013-07-18T03:36:21.190 回答