2009-07-07 18 views
2

Meine Formularvalidierung funktioniert gut, aber die Nachrichten verwenden den JSF-Komponentennamen und nicht die Feldbezeichnung. Zum Beispiel habe ich ein Feld Betreff und die Fehlermeldung, die ich bekomme, wenn es leer ist, ist etwas in den folgenden Zeilen:Seam Richfaces Formularvalidierung

UIComponent: contactBean.firstName darf nicht leer sein.

Meine Form:

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

Meine bearbeiten Vorlage:

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

Die Validierung funktioniert genauso wie ich will, die Fehlermeldungen konfigurierbar sind (zumindest den Wert auf der rechten Seite des verwendeten Labels), und die Validatoren sind so einfach zu konfigurieren, wie sie einfach sind Anmerkungen zu den Feldern der ContactBean-Klasse.

Ich möchte nur um es vertilgen und die richtigen Werte erhalten dort angezeigt zum Beispiel:

Vorname darf nicht leer sein.

Der letzte Teil ist der Ajax, onblur, tut eigentlich nichts. Das ist ein kleines Problem, auf das ich mich auch irgendwann beziehen möchte.

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

Danke,

Walter

+0

Können wir die Entity-Bean-Klasse sehen? – Drew

Antwort

2

Es ist eigentlich ganz einfach. Alles, was Sie tun müssen, ist das Label-Attribut auf der input Komponente zu setzen, etwa so:

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

Diese Nachricht was die JSF-Fehler ist, wird verwendet werden, wenn die Meldung angezeigt wird. Das Label s: label rendert nur eine Beschriftung auf dem Bildschirm und legt nicht die Beschriftung der Eingabekomponente fest.

Ich hoffe, das hilft.

+0

Danke, ich werde das später versuchen. –

+0

Danke nochmal, das wars. Es sieht jetzt so hübsch aus. Walter –