Jsf Primefaces表单字段requiredMessage显示两次

Jsf Primefaces表单字段requiredMessage显示两次,jsf,primefaces,Jsf,Primefaces,我有一个带有p:messages和inputText字段的表单。inputText字段是必需的,并且具有requiredMessage。当使用空inputText单击commandButton时,我只想使用p:messages显示消息,但我看到相同的消息两次。曾经使用过p:message,另一个我认为是服务器端验证消息(如右上角的咆哮)。我的相关代码如下: <h:form id="saveUserForm"> <p:panel style="border:none">

我有一个带有p:messages和inputText字段的表单。inputText字段是必需的,并且具有requiredMessage。当使用空inputText单击commandButton时,我只想使用p:messages显示消息,但我看到相同的消息两次。曾经使用过p:message,另一个我认为是服务器端验证消息(如右上角的咆哮)。我的相关代码如下:

<h:form id="saveUserForm">
  <p:panel style="border:none">
    <p:messages id="messages" closable="true" autoUpdate="true"  />
    <div align="left">
        <p:panelGrid styleClass="userPanel">                            
            <p:row>                                
                <p:column colspan="4">
                    <p:inputText id="street" value="" size="67" maxlength="100" required="true" requiredMessage="Street is required" />
                </p:column>
            </p:row>                            
            <p:row>
                <p:column colspan="4">
                    <div align="center">
                        <p:commandButton action="#{userController.add}" rendered="#{mode eq 'add'}" value="Add" ajax="false" update=":saveUserForm"/>
                        <p:commandButton action="#{userController.update}" rendered="#{mode ne 'add'}" value="Update" ajax="false" update=":saveUserForm"/>
                        <p:commandButton action="#{userController.prepareList}" value="Cancel" immediate="true"/>
                    </div>
                </p:column>
            </p:row>
        </p:panelGrid>
    </div>
  </p:panel>
</h:form>

不知道为什么我会看到两次所需的消息。有什么想法吗

编辑:为主模板添加咆哮代码

<p:growl id="messages" showDetail="true" sticky="true" autoUpdate="true"/>

我看到的屏幕截图:


我认为,在您的情况下,消息被添加到p:message和p:growl中

试试这个,(Primefaces 4.0及以上版本)

从p:messages中删除autoUpdate=“true”,并在p:commandButton中添加update=“:saveUserForm”,以便仅更新p:message。并确保p:growl未在单击按钮时更新

或者试试这个

<p:growl globalOnly="true" autoUpdate="false">

这样,仅来自服务器端的消息以咆哮的形式显示


编辑:确保模板中的组件未被使用。

我认为,在您的情况下,消息被添加到p:message和p:growl中

试试这个,(Primefaces 4.0及以上版本)

从p:messages中删除autoUpdate=“true”,并在p:commandButton中添加update=“:saveUserForm”,以便仅更新p:message。并确保p:growl未在单击按钮时更新

或者试试这个

<p:growl globalOnly="true" autoUpdate="false">

这样,仅来自服务器端的消息以咆哮的形式显示

编辑:确保模板中的组件未被使用。

删除
showtail=“true”
。 其默认值为
false

删除
showDetail=“true”

其默认值为
false

p:growl标记用于以咆哮格式显示消息。如果您已经包含了这两个标记,那么您将得到所看到的结果。你确定你没有把标签放在什么地方吗?你的问题让人困惑。我没有在这个代码片段的任何地方看到
(只有一个
)。您描述的第二条消息确实来自
,但在这个代码片段中也看不到。请发布一个真实的MCVE:@BalusC谢谢你调查此事。我的代码中没有真正的and。我只是在用。但我想提一提的是,我的应用程序有一个主模板,其中包含。你认为有人在叫咆哮吗?我正在编辑代码以显示twmplate咆哮,还向commandButton添加了更新属性。不确定我是否可以在这里添加屏幕截图。为什么你认为模板的代码没有被使用?那么模板的用途是什么?@BalusC我同意你的看法,但我只是更新当前表单,所以我不希望调用主模板的咆哮。我也同意我没有好的“id”来咆哮,我必须努力。这就是问题所在吗?p:growl标签用于以growl格式显示消息。如果您已经包含了这两个标记,那么您将得到所看到的结果。你确定你没有把标签放在什么地方吗?你的问题让人困惑。我没有在这个代码片段的任何地方看到
(只有一个
)。您描述的第二条消息确实来自
,但在这个代码片段中也看不到。请发布一个真实的MCVE:@BalusC谢谢你调查此事。我的代码中没有真正的and。我只是在用。但我想提一提的是,我的应用程序有一个主模板,其中包含。你认为有人在叫咆哮吗?我正在编辑代码以显示twmplate咆哮,还向commandButton添加了更新属性。不确定我是否可以在这里添加屏幕截图。为什么你认为模板的代码没有被使用?那么模板的用途是什么?@BalusC我同意你的看法,但我只是更新当前表单,所以我不希望调用主模板的咆哮。我也同意我没有好的“id”来咆哮,我必须努力。这就是问题所在吗?谢谢你,潘卡吉。我试过你的建议,但没有成功。你能检查上面的评论以获得更新吗。我试过你的建议,但没有成功。你能检查上面的评论以获得更新吗