如何检查JSF/AjaxBehaviorEvent是否选中了多个复选框



我有多个复选框-它们在xhtml视图代码中被赋予相同的id"choosen"。

我为他们添加了一个Ajax事件监听器,如下所示:

<ui:repeat var="posts"
value="#{postBacking.postsOverview.posts}">
<h:selectBooleanCheckbox id="choosen"
styleClass="check-margin"
value="#{posts.choosen}" rendered="#{posts.declined =='No'}">
<f:ajax listener="#{postsBacking.isPostsChosen}" event="click" render="@form" execute="@form"/>
</h:selectBooleanCheckbox>
</ui:repeat>

在我的backingBean中的listener方法中,我想检查是否选中了这些复选框中的任何一个,然后如果没有标记复选框,则将按钮设置为禁用,如果设置了一个或多个复选框则将按钮设为启用。

但是,我如何获取所有复选框的值?我可以使用AjaxBehaviorEvent对象吗?或者有其他方法吗?

在处理ajax事件侦听器时,复选框值通常应该应用于您的数据模型,您可以在其中查找用户选择的状态。根据该状态,只需切换一个禁用命令按钮的布尔bean属性:

@Named
@ViewScoped
public class MyBean implements Serializable {
private List<Post> posts;
private boolean buttonDisabled = true;
public void ajaxEventListener(BehaviorEvent e) {
boolean anythingChosen = false;
for (Post post : posts) {
if (post.isChosen() && "No".equals(post.getDeclined())) {
anythingChosen = true;
break;
}
}
// or alternatively using the stream api:
// anythingChosen = posts.stream().filter(Post::isChosen).map(Post::getDeclined)
//     .anyMatch("No"::equals);
setButtonDisabled(!anythingChosen);
}
// getters, setters ...
}

使用以下表格,只要没有选中复选框,命令按钮就会被禁用:

<h:form>
<ui:repeat var="post" value="#{myBean.posts}">
<h:selectBooleanCheckbox value="#{post.chosen}">
<f:ajax event="click" listener="#{myBean.ajaxEventListener}" render="@form" execute="@form"/>
</h:selectBooleanCheckbox>
</ui:repeat>
<h:commandButton action="#{myBean.doSomething()}" value="doSomething"
disabled="#{myBean.buttonDisabled}" />
</h:form>

您可以使用valueChangeListener,而不是使用listenerevent属性。每次选中/取消选中复选框时,都会触发valueChangeListener

要在调用valueChangeListener时获取值,可以循环使用postBacking.postsOverview.posts查看是否检查了任何值

不要忘记更新<f:ajax render="@form btnId"/>上的按钮以启用/禁用它。

相关内容

  • 没有找到相关文章

最新更新