2

次のリンクを確認したところ、javax.faces.webapp.ValidatorTag廃止されてValidatorELTagに置き換えられていることがわかりましたが、これに関する適切な情報が見つからないようです。

入力を受け取る正規表現バリデーターを作成したい:正規表現とエラーメッセージ。

つまり、次のようなコントロールが必要です。

<regexValidator for="myControl" check="([a-Z]^)" errorMessage="Your input contained incorrect characters" />

上記のリンクは、これの一部を実行する方法を示していますが、それが記述されてからメソッドが非推奨になっているため、大幅に変更されています。この問題にどのように対処しますか?

4

2 に答える 2

3

JEE5チュートリアルカスタムバリデーターの作成を参照してください。「カスタムタグの作成」セクションでは、クラスを実装する方法について詳しく説明しています。ValidatorELTag


for="myControl"

この属性が必要になるとは思えません(どのように使用するかはわかりません)。バリデーターは親コントロールに設定されます。for属性は通常、ラベルコンポーネントのように、あるコントロールが別のコントロールを参照する場合にのみ使用されます。


編集:私は質問を読み間違えました。上記の答えはJSPに適用されます(コアJSF 1.2のタグ関連クラスはJSP専用です。Faceletsには独自のタグシステムがあります。幸いなことに、タグを定義するためのJavaクラスは必要ありません)。

サンプルバリデーター:

public class RegexValidator implements Validator, StateHolder {
  private boolean isTransient;
  private String regex;

  public String getRegex() { return regex; }
  public void setRegex(String regex) { this.regex = regex; }

  public void validate(FacesContext context, UIComponent component, Object value)
      throws ValidatorException {
    //TODO: throw ValidatorException if not valid
  }

  //TODO: implement remaining StateHolder methods...
}

このバリデーターは、:に登録されますfaces-config.xml

  <validator>
    <validator-id>regex.validator</validator-id>
    <validator-class>val.RegexValidator</validator-class>
  </validator>

次に、タグライブラリをアプリに追加します(例WEB-INF/facelets/foo.taglib.xml)。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE facelet-taglib PUBLIC
  "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
  "http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
<facelet-taglib xmlns="http://java.sun.com/JSF/Facelet">
  <namespace>http://demo</namespace>
  <tag>
    <tag-name>regexValidator</tag-name>
    <validator>
      <validator-id>regex.validator</validator-id>
    </validator>
  </tag>
</facelet-taglib>

タグライブラリを使用するFaceletsビューに宣言を追加xmlns:demo="http://demo"します。バリデータータグは次の形式で始まり<demo:regexValidator ...ます; 属性は、バリデータークラスのイントロスペクションを通じて取得されます。

于 2009-10-12T11:35:35.410 に答える
0

これが私をつまずかせたコードに追加するのを忘れた部分です...

<context-param>
    <param-name>facelets.LIBRARIES</param-name>
    <param-value>/WEB-INF/faces/foo.taglib.xml</param-value>
</context-param>

check="([a-Z]^)"また、に変更する必要がありますregex="..."

を拡張する必要がないので、このアプローチが好きValidatorELTagです。私はファセットの大ファンで、これはもう1つのクールな機能です。

于 2010-05-17T14:22:02.537 に答える