.log(ぽちろぐ)

退屈しているおっさんの日記

Struts2 validationエラーでも、DBの値が欲しい。絶対取る!。

     validationエラーの時は、
    @Result(name = "input", location = "/inputError.jsp")
    
    に飛んでいきます。typeを書いてないので、dispacherで飛びます。
     飛んでいった先では、メッセージコードに紐付くメッセージを表示したいです。でも、DBに入ってるメッセージを、jspから取るためには、メッセージコードをjspに書いておく・・・のはやめて、アクションに定義したメッセージコードで、DBから引っ張りたいですよね。ところが、パラメータをくっつけて送ろうとすると、怒られるのです。
    @Result(name = "input", location = "/inputError.jsp?messageCode=E999")
    
    こんなのはダメ。

     なので、
    <s:property value="ApplicationErrorMessage"/>
    
    を書いておきます。Struts2は、遷移元のアクションの、getApplicationErrorMessageをコールして、ApplicationErrorMessageを取得しようとするので、アクションに以下のゲッターを作ります。
      /** 入力エラー時のメッセージコード */
      private final String validationErrMsgCode = "E999";
      /**
      * 入力エラー時のアプリ固有メッセージを返します。
      */
      public String getApplicationErrorMessage(){
          // TODO DAO生成
          // TODO レコード取得
          String message ; //TODO 表示文字列をセット
          return message;
      }
    
     なので、validationメッセージと、アプリ固有のエラーメッセージを混在表示するjspは、こうなります。
    inputError.jsp
    <%@ page language="java" contentType="text/html; charset=windows-31j"
        pageEncoding="windows-31j"%>
    <%@taglib prefix="s" uri="/struts-tags" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
    <title>入力エラー</title>
    </head>
    <body>
    
    <!-- アプリ固有のエラーメッセージ -->
    <s:property value="ApplicationErrorMessage"/>
    
    <!-- validationメッセージ -->
    <s:fielderror />
    
    <input type="button" name="" value="閉じる" onclick="self.close()"/>
    
    </body>
    </html>