DataTable中的每一行都有复选框.如何在选中新复选框时取消选中上一个复选框



单击"添加"按钮,会创建带有文本框和复选框的空行。我必须在文本框中输入详细信息,但只应选中一个复选框。现在我可以勾选所有的复选框了。但如果选中了其中一个复选框,则应取消选中其他复选框。

<p:commandButton value="Add"
actionListener="#{createReturns.addReturnBodyToList}" ajax="true"
update="bodyTable messages" style="margin-bottom:10px;"/>
<p:dataTable id="bodyTable" value="#{createReturns.returnBodyList}"
var="returnBody">
<p:column headerText="Element Name" style="width:250px;">
<p:inputText id="elementName" value="#{returnBody.elementName}"
style="width:240px;" />
</p:column>
<p:column headerText="KeyColumn" style="width:80px">
<p:selectBooleanCheckbox value="#{returnBody.keyColumn}" id="key">
<p:ajax listener="#{createReturns.toggleCheckBox()}"
event="click" update="key">
<f:attribute name="element" value="#{returnBody.elementName}"></f:attribute>
</p:ajax>
</p:selectBooleanCheckbox>
</p:column>
</p:datatable>

actionlistener,用于在数据表中添加空行的命令按钮

public void addReturnBodyToList() {
returnBody = new ReturnBody();
returnBodyList.add(returnBody);
}

ajax监听器取消选中bean 中的其他复选框

public void toggleCheckBox(ActionEvent actionEvent) {
String elementName = (String) actionEvent.getComponent()
.getAttributes().get("element");
for (ReturnBody body : returnBodyList) {
if (!body.getElementName().equals(elementName))
body.setKeyColumn(false);
System.out.println("Check ajax: " + body.toString());
}
}

您可以在toggleCheckBox((方法中实现这一点。

boolean flag; //Global
String lastChecked=new String();//global
if(!flag){
setFlag(true);
lastChecked=elementName;
}
if(flag){
for (ReturnBody body : returnBodyList) {
if (body.getElementName().equals(lastChecked)){
body.setKeyColumn(false);
lastChecked=elementName;
}
} 
}

相关内容

  • 没有找到相关文章

最新更新