我是JSF的新手,我的问题对你来说可能很愚蠢..这对我来说非常有价值。
<h:form id="form1">
<p:messages autoUpdate="true" showDetails="true" />
<p:dataTable id='form1ID'>....</dataTable>
<p:inputText value="#{bean.name}" required="true"
requiredMessage="Please Enter Name!" label="Name ">
</p:inputText>
</h:form>
<h:form id="form2">
<p:messages autoUpdate="true" showDetails="true" />
<p:dataTable id='form2ID'>....</dataTable>
<p:inputText value="#{bean.name}" required="true"
requiredMessage="Please Enter Name!" label="Name ">
</p:inputText>
<p:commandButton value="Submit" update=":form1:form1ID"
actionListener="#{mgmtBean.doCreateType}" />
</h:form>
我有两种形式。当我点击带有空字段的form2命令按钮时,它会完全显示错误消息,因为我添加了<p:messages autoUpdate="true" showDetail="true"/>
。
这里的坏事或令人惊讶的事情是,它在form1之上显示错误消息也可能是因为在form1中添加了<p:messages autoUpdate="true" showDetail="true"/>
而我试图在命令按钮上更新form1在form2。
当form2抛出验证错误消息时,我不想在form1上显示错误消息。我怎样才能解决这个问题 ?我用Google搜索了一下......但无法找到解决方案。
使用的环境是jsf-api-2.1.5和primefaces 4.0版本和视图技术是facelets(XHTML)
希望很清楚......
非常感谢任何想法。
答案 0 :(得分:1)
尝试禁用form1上的消息呈现:
<p:messages autoUpdate="true" showDetails="true" rendered="#{bean.renderedmessage}"/>
在bean中,添加renderedmessage变量:
public Boolean getRenderedmessage() {
return renderedmessage;
}
/**
* @param renderedmessage the renderedmessage to set
*/
public void setRenderedmessage(Boolean renderedmessage) {
this.renderedmessage = renderedmessage;
}
并且,对于doCreateType()方法,添加:
public void doCreateType(){
..............
setRenderedmessage(false);
.............
}
更新form1后,您可以选择一些事件或方法,您可以在其中设置setRenderedmessage(true);
答案 1 :(得分:0)
您目前遇到的情况应该告诉您,您在同一个JSF视图中通常不需要两个<p:messages/>
;一个就够了。
无论您的页面上有两个<h:form/>
,但仍然只有一个FacesContext
与该视图相关联(FacesContext
对象是一个JSF构造,它封装了所有与给定的JSF页面请求相关联的信息/数据/组件等。
默认情况下,<p:messages/>
会显示在FacesMessage
的关联实例中排队的每个FacesContext
,无论消息来源如何(嗯,几乎:如果您在globalOnly="true"
上设置<p:messages/>
,则可以更改该行为)。
话虽如此,你基本上有两种选择:
摆脱额外的<p:messages/>
并依靠(并适当地定位)只有一个来显示该视图的所有错误/警告
指定for
属性,设置为所需的组件。这样做,您将保证只有一个输入组件可以触发其相关消息组件的显示。例如
<h:form id="form1">
<p:messages for="inputName" autoUpdate="true" showDetails="true" />
<p:dataTable id='form1ID'>....</dataTable>
<p:inputText id="inputName" value="#{bean.name}" required="true"
requiredMessage="Please Enter Name!" label="Name ">
</p:inputText>
</h:form>
请注意,我在id
组件上设置了<p:inputText/>
属性;这是必要的,因此您可以在for
组件的messages
属性中使用它。
进一步阅读:
答案 2 :(得分:0)
我已使用以下代码修复此问题
<p:messages autoUpdate="true" showDetails="true" visibility="info"/>
所以它只是显示信息消息,其他弹出错误消息将不会播放。