2 Stimmen

JSf 2 mit Hibernate Validator 4 und Tomcat 6

Das Problem, das ich habe, ist, dass mein Die Bean-Validierung funktioniert nicht so, wie ich es erwarten würde .

Ich habe eine Session Scoped Managed Bean mit einer name Feld, das an ein h:inputText . Der Name muss eingegeben werden und hat eine Mindestlänge von 1 Zeichen und eine Höchstlänge von 5 Zeichen. Ich erwarte, dass, wenn ich den Namen in das Textfeld eingebe, er von der Backing Bean entsprechend validiert wird, und wenn er fehlschlägt, werden die entsprechenden Fehlermeldungen angezeigt.

Dies ist jedoch nicht der Fall. Die Validierungen schlagen immer fehl auch wenn ich im inputText eine gültige Groß-/Kleinschreibung eingebe (z.B. "abc"). Bei der Fehlersuche in der Anwendung scheint es, dass die getName() Accessor wird immer aufgerufen, und der Setter wird nie erreicht. Mache ich etwas falsch? Ich nehme an, dass der Validator den Accessor zur Validierung verwendet, aber das Problem ist, dass der Setter nie die Möglichkeit hat, den Wert des Namens zu aktualisieren... Ich muss etwas übersehen.

Nachfolgend finden Sie die Verwaltete Bohne:

@ManagedBean
@SessionScoped
public class James implements Serializable {

  public James() {
    super();
   }

  private String name;

  @NotNull
  @Min(value = 1)
  @Max(value = 5)
  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }
}

Unten ist das Fragment des JSF xhtml. Ich habe ein paar verschiedene Varianten mit separaten Formularen ausprobiert, aber die erste Option ist diejenige, von der ich annehmen würde, dass sie funktioniert (ich denke, sie ist gleichwertig mit der dritten Option, aber ich habe es vorsichtshalber versucht :))

<h:messages/>
<h:form>
  <h:inputText id="jamesName" value="#{james.name}"/>
  <h:message for="jamesName"/>
  <h:commandButton value="submit"/>
</h:form>
<h:form>
  <h:inputText id="jamesName" value="#{james.name}" immediate="true"/>
  <h:message for="jamesName"/>
  <h:commandButton value="submit"/>
</h:form>
<h:form>
  <h:inputText id="jamesName" value="#{james.name}">
    <f:validateBean />
  </h:inputText>
  <h:message for="jamesName"/>
  <h:commandButton value="submit"/>
</h:form>

Ich verwende JSF 2.0.2-FCS mit Hibernate Entity Manager 3.3.2.GA und Hibernate Validator 4.0.2.GA (unten sind die relevanten Teile aus meinem Maven POM), läuft in Tomcat 6.0.20 auf Windows XP Pro Service Pack 3 (32-bit).

<dependency>
  <groupId>javax.faces</groupId>
  <artifactId>jsf-api</artifactId>
  <version>2.0.2-FCS</version>
</dependency>
<dependency>
  <groupId>javax.faces</groupId>
  <artifactId>jsf-impl</artifactId>
  <version>2.0.2-FCS</version>
</dependency>
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
</dependency>
<dependency>
  <groupId>javax.servlet.jsp</groupId>
  <artifactId>jsp-api</artifactId>
  <version>2.1</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-entitymanager</artifactId>
  <version>3.3.2.GA</version>
</dependency>
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-validator</artifactId>
  <version>4.0.2.GA</version>
</dependency>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X