如何检查JSF中是否设置了<s:message>?</s:message>

时间:2010-12-14 17:51:53

标签: java jsf seam

我有以下两个文件(JSF 1.2)来构建表单:

<!-- segment of form.xhtml -->
<s:decorate template="edit.xhtml">
    <h:inputText label="First Name" id="firstName" required="true" value="#{contactBean.firstName}">
        <f:validateLength minimum="1" maximum="25"/>
    </h:inputText>
</s:decorate>

<!-- segment of edit.xhtml -->
<s:validateAll>
    <ui:insert />
</s:validateAll>

<h:graphicImage value="/images/errorIcon.png" rendered="#{when we have a message for this input}" />
<s:message />

edit.xhtml,是否有我在<h:graphicImage> rendered属性中使用的表达式?

我尝试了rendered="#{invalid}",但即使invalid被清除,<s:messages />仍然有效。这会导致errorIcon.png显示时没有关联的<s:message />

如果我采取完全错误的做法,请告诉我。

1 个答案:

答案 0 :(得分:4)

我不确定Seam部分,我只建议使用通用的JSF方法。我基本上看到了两种实现这一要求的方法:

  1. 在bean属性中包装FacesContext#getMessages(String clientId)

    public boolean hasMessages(String clientId) {
        return FacesContext.getCurrentInstance().getMessages(clientId).hasNext();
    }
    

    按如下方式使用:

    <h:graphicImage rendered="#{bean.hasMessages('form:firstName')}" />
    

    (我假设您已经在使用JBoss EL)

  2. 将图像设置为CSS背景图像(我的首选方法):

    <s:message errorClass="message error" />
    

    .message.error {
        background: url('error.png') no-repeat left center;
        padding-left: 15px;
    }