2009-07-07 4 views
2

Моя проверка формы отлично работает, но в сообщениях используется имя компонента JSF, а не метка поля. Например, у меня есть полевой объект, и сообщение об ошибке, которое я получаю, когда оно пустое, есть что-то вроде строк:Проверка формы Seym Richfaces

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

Спасибо,

Walter

+0

Можем ли мы увидеть класс компонентов сущности? – Drew

ответ

2

Это на самом деле довольно просто. Все, что вам нужно сделать, это установить атрибут метки на компоненте 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 просто отображает метку на экране и не устанавливает метку входного компонента.

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

+0

Спасибо, я попробую позже. – 2009-08-05 17:40:09

+0

Еще раз спасибо, вот и все. Сейчас это выглядит так красиво. Walter – 2009-08-05 22:18:15

Смежные вопросы