java如何在使用primefaces ajax事件“change”从p:SelectCheckBox菜单中取消选择最后一个选中的项时更新支持bean?
在我的xhtml文件中有一个primefaces“selectCheckboxMenu”,当ajax事件“change”被触发时,我需要更新它,当从我的选中列表中选择和取消选择项目时,它可以正常工作,唯一的问题是,每当我取消选择列表上最后一个也是唯一一个选中的项目时,事件似乎会丢失。似乎有一些代码正在前端执行(HTML、JavaScript),但它没有到达调试控制台中的托管Bean。是否有人可以帮助此事件工作,以便我可以看到托管Bean中的更改
<h:panelGroup>
<h:outputLabel for="myDocs" value="#{msg['documentation']}" />
<p:selectCheckboxMenu id="myDocs" value="#{documentMB.selectedDocs}" label="#{msg['select']}" showHeader="false" required="true" requiredMessage="#{msg['message']}" updateLabel="true" >
<f:selectItems value="#{documentMB.availableDocs}" var="doc" itemLabel="#{doc.name}" itemValue="#{doc.id}" />
<p:ajax event="change" update="contentMessage" listener="#{documentMB.changeContent()}" />
</p:selectCheckboxMenu>
<p:message for="myDocs" ></p:message>
</h:panelGroup>
我的托管Bean:
@ManagedBean
@ViewScoped
public class DocumentMB {
List<Documents> selectedDocs;
List<Docuemnts> availableDocs;
@PostConstruct
public void init() {
//all initializations
}
//getters and setters
}
# 1 楼答案
如果您在其中放置一个
<p:growl autoUpdate="true"/>
,您将看到requiredMessage
在删除最后一个检查时显示。因此,逻辑是验证失败将停止侦听器运行(commandButtons和-Links也会发生同样的情况)我不确定是否有更好的方法,但我只想删除
required="true"
,并在提交整个表单时手动执行此验证。如果它不是更大表单的一部分,我只会向用户显示当前消息(更新p:message
)