有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    如果您在其中放置一个<p:growl autoUpdate="true"/>,您将看到requiredMessage在删除最后一个检查时显示。因此,逻辑是验证失败将停止侦听器运行(commandButtons和-Links也会发生同样的情况)

    我不确定是否有更好的方法,但我只想删除required="true",并在提交整个表单时手动执行此验证。如果它不是更大表单的一部分,我只会向用户显示当前消息(更新p:message