アクションリクエストを送信するindex.jspを作成しました
<meta http-equiv="REFRESH" content="0;url=./radioButton.action">
これが完了すると、リクエストはradio.jspに転送されます。これでは、国、州のリストなどを表示しています(したがって、これをindex.jspからリダイレクトしています)。今、私はこのフォームに検証を課しています。検証のために .xml を正しく作成しました。検証が失敗すると、./radioButton.action にリダイレクトされます。
<result name="input" type="redirectAction">radioButton</result>
MethodFilterInterceptorを拡張するインターセプターを 1 つ作成しました。これにより、 after() メソッドにフォロー ロジックを持つセッション スコープ内にアクション エラーが保持されます。
if (fieldErrors != null && fieldErrors.size() > 0)
{
Iterator it = fieldErrors.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry)it.next();
System.out.println(pairs.getKey() + " = " + pairs.getValue().toString());
}
session.put(FIELD_ERRORS_KEY, fieldErrors);
}
public static final String FIELD_ERRORS_KEY = "RedirectMessageInterceptor_FieldErrors";
以下のように.xmlでインターセプターを構成しました
<interceptors>
<interceptor name="redirectMessage" class="com.daya.message.RedirectMessageInterceptor" />
<interceptor-stack name="sessionStack">
<interceptor-ref name="redirectMessage" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptor-stack>
</interceptors>
セッション スコープに入る前に、コンソールにエラー メッセージが表示されます。コンソールに出力される出力は
userName = [User Name is required to login]
password = [Password is required to login]
以下のタグを使用してフィールドエラーを表示しています
<s:fielderror></s:fielderror>
しかし、リダイレクト後 (検証が失敗したとき) の jsp では、メッセージが表示されません。
クライアント側の検証はうまく機能しています。サーバー側の検証を確認するために JavaScript を無効にしました