質問

の問題なんと私の 豆の検証などを参考にして設定.

私は、セッションScoped管理ビーンを name るフィールドにバインド h:inputText.その名の入力が必要で、最低1文字長さは、最大の長さは5文字です。ることを期待したいの入口や階段に入れない、名前をテキストボックスで検査されたそのため、バッキング豆、失敗した場合、それらの表示に対応するエラーメッセージが返されます。

しかし、これは正しくありません。 の検証は常に失敗, しても入力が有効な場合にinputText例"abc").上のデバッグに適用され getName() アクセス用メソッドは常にという、セッターがいます。にしてるわけではありませんのですか。このvalidatorはアクセス用メソッドを検証すが、問題は、セッターなャ値を更新名で---私は必ず何かが足りない.

以下の管理ビーン:

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

以下のフラグメント情xhtml.また、複数の異なるバリエーションを別々の形式が最初のオプションのいる作業だと思うのと同等のオプションですが、ただの場合:))

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

私が使っている当財団2.0.2-FCSとHibernate体長3.3.2.GAとHibernate Validator4.0.2.GA(以下、関係部品から私のMavenのPOM)、走行Tomcat6.0.20Windows XP Proサービスパック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>
役に立ちましたか?

解決

あなたの検証が正常に機能しています。問題は、あなたの@Minと@Max注釈であります:

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

@Minと@Maxは、数値比較のために意図されています。あなたは書いてます:

  

は名前を入力し、1つの文字の最小の長さ、および5つの文字の最大長を持たなければなりません。

あなたはのように、代わりに@sizeアノテーションを使用する必要があります:

@NotNull
@Size(min = 1, max = 5)
public String getName() {
    return name;
}
検証が失敗したため、

はBeanフィールドは更新されません。検証が成功した後にのみ、Beanが更新されます。

他のヒント

あなたの追加質問に関しては

- いいえ、彼らは互換性がありません - この行列を参照してください。

JSFの質問について - 。TomcatのログとFirefoxのJavaScriptコンソールの両方をチェック

このような場合にコンパイルエラーを上げるために、我々は、Hibernate Validatorの注釈プロセッサを使用することができます。 Hibernateバリ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top