防止 p:message 组件显示已经在 p:messages 中显示过的消息。

4
我有一个输入组件,它有三种类型的验证(必填、验证器消息、转换器消息),并且该输入组件有自己的消息图标。整个表单还有一个消息组件,用于显示所有组件的消息,如下所示:
<p:message for="idEstNumOfUser" display="icon" id="msgEstNumOfUser" />
                    <p:inputText id="idEstNumOfUser"
                            placeholder="Estimated Number of Users"
                            value="#{mybean.estimatedUserCount}" required="true" requiredMessage=""
                            maxlength="8" title="Estimated Number of Users"
                            validatorMessage="Please enter digits only for 'Estimated Number of Users'"
                            converterMessage="Please enter digits only for 'Estimated Number of Users'">
                            <f:convertNumber />
                    <p:ajax event="blur" update=":betasignup:msgEstNumOfUser" />
                    </p:inputText>

                    <p:messages id="messages"  autoUpdate="true"/>

我在错误信息之前有一个样式,显示一个警告图标,如下所示:
.ui-messages-error-summary:before{
                       font-family: FontAwesome;
                       speak: none;
                       font-style: normal;
                       font-weight: normal;
                       font-variant: normal;
                       text-transform: none;
                       line-height: 1;
                       -webkit-font-smoothing: antialiased;
                       content: "\f05a";
                       margin-right: 6px;
                    }
发生了什么:在需要验证的情况下,消息组件生成的HTML如下:

              <div class="ui-messages-error ui-corner-all">
              <span class="ui-messages-error-icon">
              </span>
              <ul>
               <li>
                 <span class="ui-messages-error-summary">
                 </span>
              </li>
             </ul>
            </div>  

所以.ui-messages-error-summary:before的样式被应用了,但是我不希望在需要验证时应用它。
如果对于这种情况有任何改进验证的建议,请告知。
2个回答

6

redisplay属性设置为false

<p:messages ... redisplay="false" />

这样做可以避免重复显示已经显示过的消息。一个明显的要求是,<p:messages>组件本身必须放置在所有<h|p:message>组件之。如果您实际上需要在<h|p:message>组件之前进行视觉定位,则可以使用CSS和可能的JS来重新定位它。


1

我在失焦事件的oncomplete中使用了以下JS函数,它运行良好:

function hideRequiredMessage(){
            var ErrorMessagesSpans= document.getElementById("myform:messages").getElementsByClassName("ui-messages-error-summary");
            if(ErrorMessagesSpans!=null && ErrorMessagesSpans.length > 0){
            var ErrorMessageSpan=ErrorMessagesSpans[0];
               if(ErrorMessageSpan.innerHTML==''){
                  //ErrorMessageSpan.className = '';
                   ErrorMessageSpan.parentNode.removeChild(ErrorMessageSpan);
              }
            }
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接