我有一个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:inputText>
关联的每个<p:message>
中显示"必需的输入错误消息"。如何在<p:message globalOnly="true">
中显示它们
我如何在页面中显示它们?
您需要指定一个有效的客户端ID。客户端ID与组件ID不一致。客户机ID是您在jsf生成的HTML输出中看到的任何内容。另外,客户机ID应该是输入组件的ID,而不是消息组件的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:inputText>
关联的每个<p:message>
中显示"必需的输入错误消息"。如何在<p:message globalOnly="true">
中显示它们?
<p:message>
不是有效的组件,你应该使用<p:messages>
。
<p:messages id="msg" globalOnly="true" display="text"/>
globalOnly="true"
属性意味着只显示具有null
客户端ID的消息。因此,您应该添加这样的消息。
context.addMessage(null, message);
参见:
- 如何更好地使用JSF h:消息?在JSF中何时以及如何生成clientID ?
与具体问题无关的,您试图在那里添加的非全局消息("无效名称")实际上应该由完整的验证器完成。另请参见如何在JSF中执行验证,如何在JSF中创建自定义验证器的具体示例。