在存在来自特定对象的消息时有条件地渲染组件

Conditionally render component on presence of message from specific object

我打算验证下面bootstrap形式的字段usernameTxt,参考BalusC answer and Aleksei Loginov answer

<div class="form-group">
                <label class="control-label col-sm-2" for="usernameTxt">Fullname(*):</label>
                <div class="col-sm-10">
                    <h:inputText type="text" class="form-control" id="usernameTxt"
                        a:placeholder="Enter your name" required="true"
                        requiredMessage="Fullname is required"
                        value="#{data.personalInformation.username}"></h:inputText>
                    <h:panelGroup layout="block" rendered="#{not empty facesContext.getMessageList('usernameTxt')}" class="alert alert-danger">
                        <h:message for="usernameTxt"></h:message>
                    </h:panelGroup>
                </div>
            </div>

希望是,如果输入文本为空,那么它将呈现块 <h:panelGroup>,结果应该是这样的

(那张照片是我去掉rendered 属性中的not条件时的照片)。我无法正确地有条件地渲染块。渲染条件中是否有任何语法,或者我在这里遗漏了什么?

问题已解决

我花了一整天的时间才发现页面上的实际 usernameTxt id 已经呈现,这与我预期的不一样

所以我必须把条件改回

<h:panelGroup layout="block"
                        rendered="#{not empty facesContext.getMessageList('form:j_id_9:useridTxt')}"
                        class="alert alert-danger">
                        <h:message for="useridTxt"></h:message>
                    </h:panelGroup>

它解决了我的问题