gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:07:11 26 4
gpt4 key购买 nike

我有一个 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"));
}
}

但它们没有显示,服务器日志不断打印以下警告:

There are some unhandled FacesMessages, this means not every FacesMessage had a chance to be rendered

如何在页面中显示它们?

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

最佳答案

How do I show them in the page?

您需要指定有效的客户端 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);
<小时/>

And, a second question, if I submit the form with three empty input fields, it shows "required input error message" in each <p:message> associated with the <p:inputText>. How do I show them in the <p:message globalOnly="true">?

<p:message>不是有效的组件,您应该使用 <p:messages> .

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

globalOnly="true"属性意味着只有带有 null 的消息将显示客户端 ID。因此,您应该添加这样一条消息。

context.addMessage(null, message);

另请参阅:

<小时/>

与具体问题无关,您尝试添加的非全局消息(“无效名称”)实际上应该由完全值得验证的验证器完成。另请参阅How to perform validation in JSF, how to create a custom validator in JSF举一个具体的例子。

关于jsf - 有一些未处理的 FacesMessage,这意味着并非每个 FacesMessage 都有机会被渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14304774/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com