Проверка формы Seam Richfaces

Моя проверка формы работает отлично, но в сообщениях используется имя компонента 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>

My edit template:

<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;
    }
}

Спасибо,

Уолтер


person Community    schedule 07.07.2009    source источник
comment
Можем ли мы увидеть класс компонента управления данными?   -  person Drew    schedule 08.07.2009


Ответы (1)


Это на самом деле довольно просто. Все, что вам нужно сделать, это установить атрибут label для компонента inputText, например:

<h:inputText id="firstName" label="#{messages['user.firstName']}" required="true" value="#{contactBean.firstName}">
    <a:support event="onblur" reRender="firstNameDecorate"/>
</h:inputText>

Это то, что будет использовать сообщение об ошибке JSF при отображении сообщения. Тег s:label просто отображает метку на экране и не устанавливает метку компонента ввода.

Надеюсь, это поможет.

person Kirderf    schedule 05.08.2009
comment
Спасибо, попробую позже. - person ; 05.08.2009
comment
Еще раз спасибо, так и было. Это выглядит так красиво сейчас. Уолтер - person ; 06.08.2009