0

Tapestry を使用して Web GUI をプレゼンテーション レイヤーとして作成しているときに、ドメイン オブジェクトによってスローされるチェック済み例外を処理および処理する方法について、いくつかのジレンマがあります。

メソッドの1つFooをスローするドメインオブジェクトがあるとします。FooException

public class Foo {
    ...
    public void fooMethod throws FooException() {
        ...
    }
    ...
}

ここで、オブジェクトがたとえば で編集されている、というタペストリー ページがあるとBarFooますBeanEditor

BeanEditorここで、オブジェクトを作成するために不正な値が渡されないようにするためにFoo、次の 2 つの基本的な方法を考えることができます。

  1. @Validate注釈 を使用したタペストリー フィールドの検証

    この場合、正規表現を介して、または値を制限するか、または同様のアクションを使用して入力をフィルタリングおよびチェックできる場合、@Validate編集中のフィールドの横に気の利いたエラーメッセージが表示され、送信が失敗するため、ユーザーは彼がそこに書いたことと、それを修正する方法を考えてください。

  2. ドメインの例外をキャッチし、それに基づいてアクションを実行する

    このシナリオでは、できることとできないことに関して、より多くのオプションが提供されると思います。たとえば、 used が入力する必要がURLあり、入力中に間違いを犯した場合、URLコンストラクターは独自の をスローしMalformedURLExceptionます。Java コードでその例外をキャッチすることはできますが、私の質問は、次に何をどのように行うべきかということです。

Tapestry は、物事がバラバラになったときにポップアップする例外ウィンドウ以外に、ドメインの例外 (チェック済みおよび/または未チェック) を処理する特別なメカニズムを提供していますか?

この特定の問題を解決する方法に関するパターンはありますか?

IndexOutOfBoundsExceptionのような一般的で通常の例外と、ドメイン固有の例外との間の境界をどこに引きますFooExceptionか?

:D

4

1 に答える 1

2

最良の方法は、フィールドに検証を適用することです。1 つの方法は、@Validate を使用することです。もう 1 つは、 tapestry -beanvalidator を追加して Bean Validation (JSR 303) アノテーションを使用する方法です。

さらに、Tapestry では、値がプロパティに適用される前に、すべてのフォーム フィールド コンポーネントが「検証」イベントをトリガーします。

http://tapestry.apache.org/forms-and-validation.htmlですべて説明されています。たとえば、「count」の at:id を持つフォーム フィールドがあると仮定すると、イベント ハンドラー メソッドを宣言することでそれを検証できます。

void onValidateFromCount(Integer value) throws ValidationException {
    if (value == 13) throw new ValidationException("Thirteen is an unlucky number.");
}
于 2013-10-17T00:00:42.150 に答える