我的表单验证效果很好,但是消息使用JSF组件名称而不是字段标签。例如,我有一个字段主题,当它为空时我得到的错误消息是:
UIComponent:contactBean.firstName不能为空。
我的表格:
<div class="field">
<s:decorate id="firstNameDecorate" template="edit.xhtml">
<ui:define name="label">#{messages['user.firstName']}</ui:define>
<h:inputText id="firstName" required="true" value="#{contactBean.firstName}">
<a:support event="onblur" reRender="firstNameDecorate"/>
</h:inputText>
</s:decorate>
我的编辑模板:
<div class="entry">
<s:label styleClass="label #{invalid?'errors':''}">
<ui:insert name="label"/>
<s:span styleClass="required" rendered="#{required}">*</s:span>
</s:label>
<span class="input #{invalid?'errors':''}">
<s:validateAll>
<ui:insert/>
</s:validateAll>
</span>
<s:message styleClass="error errors"/>
</div>
验证工作就像我想要的那样,错误消息是可配置的(至少是它使用的标签右边的值),验证器很容易配置,因为它们很简单就是ContactBean类的字段上的注释
我只想对其进行修改并获得正确的值,例如:
名字不能为空。
最后一部分是ajax,onblur,实际上并没有做任何事情。这是一个小问题,我想在某些时候解决这个问题。
ContactBean.java
package com.walterjwhite.seamCore.model;
import java.io.Serializable;
import org.hibernate.validator.Email;
import org.hibernate.validator.NotEmpty;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.Name;
@AutoCreate
@Name("com.walterjwhite.seamCore.model.contactBean")
public class ContactBean
implements Serializable
{
protected String firstName;
protected String lastName;
protected String emailAddress;
protected String subject;
protected String message;
public String getFirstName()
{
return firstName;
}
public void setFirstName(String firstName)
{
this.firstName = firstName;
}
@NotEmpty
public String getLastName()
{
return lastName;
}
public void setLastName(String lastName)
{
this.lastName = lastName;
}
@NotEmpty
@Email
public String getEmailAddress()
{
return emailAddress;
}
public void setEmailAddress(String emailAddress)
{
this.emailAddress = emailAddress;
}
@NotEmpty
public String getSubject()
{
return subject;
}
public void setSubject(String subject)
{
this.subject = subject;
}
@NotEmpty
public String getMessage()
{
return message;
}
public void setMessage(String message)
{
this.message = message;
}
}
谢谢,
沃尔特
答案 0 :(得分:2)
实际上非常简单。您所要做的就是在inputText组件上设置label属性,如下所示:
<h:inputText id="firstName" label="#{messages['user.firstName']}" required="true" value="#{contactBean.firstName}">
<a:support event="onblur" reRender="firstNameDecorate"/>
</h:inputText>
这是显示消息时JSF错误消息将使用的内容。 s:label标签只是在屏幕上呈现标签,而不是设置输入组件的标签。
我希望这会有所帮助。