Seam Richfaces表单验证

时间:2009-07-07 01:48:14

标签: hibernate validation jsf seam

我的表单验证效果很好,但是消息使用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;
    }
}

谢谢,

沃尔特

1 个答案:

答案 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标签只是在屏幕上呈现标签,而不是设置输入组件的标签。

我希望这会有所帮助。