2010-12-14 69 views
1

我有以下两个文件(JSF 1.2)来构建的一种形式:如何检查在JSF中是否设置了<s:message />?

<!-- 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 />

让我知道我是否完全采取了错误的做法。

回答

4

我不确定关于Seam部分,我只会提出通用的JSF方法。我看到基本上有两种方法可以达到这个要求:

  1. FacesContext#getMessages(String clientId)换成一个bean属性。

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

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

  2. 图像设置为CSS背景图像,而不是(我首选的方法:

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

    如下使用它):

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

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

我绝对喜欢第二种方法比我的目标了,感谢更好。 – Dolph 2010-12-14 19:34:30

+0

不客气。 – BalusC 2010-12-14 19:35:23

+0

实施,测试和接受:) – Dolph 2010-12-14 20:10:36

相关问题