1

プロパティの初期化に要求パラメーターを使用する単純な Java Bean があります。このため、seam は@RequestParameter、リクエスト パラメータを Bean プロパティに直接注入する便利なアノテーションを提供します。これは、エラー処理を除いて優れています。NumberFormatExceptionよりユーザーフレンドリーなエラー出力を提供するためにリクエストパラメーターが壊れている場合、解析例外 ( 、...) をキャッチする方法はありますか?

私は pages.xml で例外処理を認識していますがNumberFormatException、それ以上のコンテキストなしで一般化する方法であるため、そこに入れたくありません。

解析例外をキャッチする必要がある Bean の最小限の例entityId:

@Name("apiPresenter")
@Scope(ScopeType.PAGE)
public class MyBean {

  @RequestParameter
  private Long entityId;
  ...
}
4

1 に答える 1

1

@RequestParameter便利な場合もありますが、あまり柔軟ではありません。変換や検証が必要なパラメーターをマップする必要がある場合は、ページ パラメーター定義を使用することをお勧めします。これにより、パラメーターのデコード中に適用する JSF コンバーターまたはバリデーターを指定できるためです。次に例を示します。

<page view-id="/myview.xthml">
  <param name="entityId" value="#{apiPresenter.entityId}" converterId="javax.faces.Long" />
</page>

変換エラーまたは検証エラーがある場合、コンバーターは JSF FacesMessages コンポーネントにメッセージを追加します。これを使用して、エラー ページでエラー状態をレンダリングできます。ここで独自のコンバーターやバリデーターを使用できることに注意してください。次のように、パラメーターが必要であることを示すこともできます。

<page view-id="/myview.xhtml">
  <!-- parameter is required, issue error if it is not provided -->
  <param name="entityId" value="#{apiPresenter.entityId}" validatorId="your.validator" required="true" />
</page>

または、 を使用@RequestParameterしてパラメーターを文字列変数に割り当て、変換 (および最終的なエラー ページへのリダイレクト) を手動で実行することもできます。

于 2013-10-17T15:02:04.353 に答える