我有以下两个文件(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 />
。
如果我采取完全错误的做法,请告诉我。
答案 0 :(得分:4)
我不确定Seam部分,我只建议使用通用的JSF方法。我基本上看到了两种实现这一要求的方法:
在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)
将图像设置为CSS背景图像(我的首选方法):
<s:message errorClass="message error" />
与
.message.error {
background: url('error.png') no-repeat left center;
padding-left: 15px;
}