我的 xhtml 文件中有一个素数"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
}
如果你在那里放了一个<p:growl autoUpdate="true"/>
,你会看到当你删除最后一个检查时requiredMessage
显示出来。因此,逻辑是失败的验证将阻止侦听器运行(命令按钮和-Links也会发生同样的情况)。
我不确定是否有更好的方法,但我只会删除required="true"
并在提交整个表单时手动进行此验证。如果它不是较大表单的一部分,我只会向用户显示当前消息(更新p:message
)。