有一些未处理的FacesMessages,这意味着并非每个FacesMessage都有机会被渲染

问题描述 投票:2回答:1

我有一个JSF 2.1 + PrimeFaces 3.3页面:

<h:form id="particluar">
  <p:message id="msg" globalOnly="true" display="text"/>

  <h:panelGrid columns="2" id="test">
    <h:panelGrid id="panel2" columns="3">
      <p:inputText id="name1" value="Student.studentID" required="true"/>          
      <p:commandButton value="Check Name" actionListener="#{Student.abc}" process="name1" update="panel2" />
      <p:message id="msg1" for="name1" display="text"/>
    </h:panelGrid>

    <p:inputText id="name2" required="true"/>
    <p:message id="msg2" for="name2" display="text"/>

    <p:inputText id="name3" required="true"/>
    <p:message id="msg3" for="name3" display="text"/>

  </h:panelGrid>
  <p:commandButton value="submit" actionListener="#{Student.xyz}" update="particluar" />
</h:form>

我正在尝试在名称无效时手动添加面部消息:

public void xyz() {
  if (name1.equals("primefaces")) {
    FacesContext.getCurrentInstance().addMessage("msg1", new FacesMessage(FacesMessage.SEVERITY_ERROR,"Invalid Name", "Invalid Name"));
  }
  if (name2.equals("primefaces")) {
    FacesContext.getCurrentInstance().addMessage("msg2", new FacesMessage(FacesMessage.SEVERITY_ERROR,"Invalid Name", "Invalid Name"));
  }
  if (name3.equals("primefaces")) {
    FacesContext.getCurrentInstance().addMessage("msg3", new FacesMessage(FacesMessage.SEVERITY_ERROR,"Invalid Name", "Invalid Name"));
  }
}

但它们不会显示,服务器日志会继续打印以下警告:

有一些未处理的FacesMessages,这意味着并非每个FacesMessage都有机会被渲染

如何在页面中显示它们?

并且,第二个问题,如果我提交带有三个空输入字段的表单,它会在与<p:message>相关联的每个<p:inputText>中显示“必需的输入错误消息”。我如何在<p:message globalOnly="true">中展示它们?

jsf message
1个回答
6
投票

如何在页面中显示它们?

您需要指定有效的客户端ID。客户端ID与组件ID不同。客户端ID是您在JSF生成的HTML输出中看到的任何内容。此外,客户端ID应该是输入组件之一,而不是消息组件。

所以,给出一个

<h:form id="particular">
    <p:inputText id="name1" />
    <p:message id="msg1" for="name1" />
</h:form>

输入组件具有客户端ID particular:name1(在浏览​​器中右键单击页面并执行查看源以自行查看)。因此,消息应该附加在此客户端ID上。

context.addMessage("particular:name1", message);

并且,第二个问题,如果我提交带有三个空输入字段的表单,它会在与<p:message>相关联的每个<p:inputText>中显示“必需的输入错误消息”。我如何在<p:message globalOnly="true">中展示它们?

<p:message>不是有效的组成部分,你应该使用<p:messages>

<p:messages id="msg" globalOnly="true" display="text"/>

globalOnly="true"属性表示只显示带有null客户端ID的消息。所以,你应该只添加这样的消息。

context.addMessage(null, message);

See also:


与具体问题无关,您尝试在其中添加的非全局消息(“无效名称”)实际上应由完全有效的验证器完成。另请参见How to perform validation in JSF, how to create a custom validator in JSF的具体示例。

© www.soinside.com 2019 - 2024. All rights reserved.