- PR -

struts1.2.8のvalidateで{0}が置き換わらない

1
投稿者投稿内容
わか
常連さん
会議室デビュー日: 2003/12/14
投稿数: 47
お住まい・勤務地: 広島市
投稿日時: 2005-12-14 11:05
お世話になります、ワカです。

struts1.2.8を使用しております。
validateメソッドでsubmit前にフォームビーンの値のチェックをしたいのですが、
message.propertiesで{0}とした部分が置き換わらず困っています。

struts1.2.xからは、ActionError、ActionErrorsの代わりに、
ActionMessage、ActionMessagesを使うのが正しいようですが、構文に誤りがあるのでしょうか。

文字が置き換わらないだけで、
validateメソッドは処理されています。(Eclipseのブレークポイントで確認)

現在の表示
{0}に入力された文字が長すぎます。
期待する表示
お知らせに入力された文字が長すぎます。

検索エンジン、過去ログなど検索しましたが、解決に至りませんでした。
同様の現象が発生された方から、アドバイス頂けませんでしょうか。
よろしくお願いします。

==環境==
Eclipse 3.1.1
tomcat 5.5.12
struts 1.2.8
======

■ ActionForm
コード:
public ActionErrors validate(ActionMapping ap, HttpServletRequest req) {
  ActionErrors errors = new ActionErrors();
  // 「OK」ボタンが押下された場合
  if(req.getParameter("buttonOK") != null) {
    // +++ 入力文字数のチェック +++
      if(this.oshirase.length() > 100) {
        errors.add("お知らせ", new ActionMessage("error.inputtoolong"));
      }
    }
  return errors;
}



■ message.properties (native2asciiで変換前の値)
error.inputtoolong={0}に入力された文字が長すぎます。
ハツキタツミ
大ベテラン
会議室デビュー日: 2005/05/24
投稿数: 108
投稿日時: 2005-12-14 11:15
ActionMessage(java.lang.String key, java.lang.Object value0)
でvalue0に置換したい値をセットするだけでは?
わか
常連さん
会議室デビュー日: 2003/12/14
投稿数: 47
お住まい・勤務地: 広島市
投稿日時: 2005-12-14 11:31
ハツキタツミ さま 書き込みありがとうございます。

コードを次のように変更したところ、期待する表示を得ることができました。

コード:
public ActionErrors validate(ActionMapping ap, HttpServletRequest req) {
  ActionErrors errors = new ActionErrors();
  // 「OK」ボタンが押下された場合
  if(req.getParameter("buttonOK") != null) {
    // +++ 入力文字数のチェック +++
      if(this.oshirase.length() > 100) {
        errors.add("What_should_you_put?", new ActionMessage("error.inputtoolong", "お知らせ"));
      }
    }
  return errors;
}



ここで疑問なのですが、
ActionMessages#add(java.lang.String property, ActionMessage message)
の property は、何を設定すべきなのでしょうか。

初歩的な疑問かと思いますが、検索の要領が悪く、解決することができません。
ご教授頂ければ幸いです。

■ 参考としているサイト
http://www.jajakarta.org/struts/struts1.2/documentation/ja/targetWP/api/org/apache/struts/action/ActionMessages.html
ハツキタツミ
大ベテラン
会議室デビュー日: 2005/05/24
投稿数: 108
投稿日時: 2005-12-14 13:03
正確にはわかりませんが、重複しなければいいのではないでしょうか?
自分は、いつもリソースのキーをセットします。
例えば
コード:

errors.add("error.inputtoolong", new ActionMessage("error.inputtoolong", "お知らせ"));


といったかんじ。

[ メッセージ編集済み 編集者: ハツキタツミ 編集日時 2005-12-14 13:07 ]
わか
常連さん
会議室デビュー日: 2003/12/14
投稿数: 47
お住まい・勤務地: 広島市
投稿日時: 2005-12-14 19:42
お世話になります、ワカです。

ハツキタツミさま 参考にさせていただきます。

propertyはActionMessages#get(java.lang.String property)
を使用する場合の検索キーとして使用するのですね。

ありがとうございました。

## 2005.12.15 13:32
メソッド「get」を「add」と誤記していたのを修正
修正前:propertyはActionMessages#add(java.lang.String property)
修正後:propertyはActionMessages#get(java.lang.String property)

[ メッセージ編集済み 編集者: わか 編集日時 2005-12-15 13:34 ]
アティ
ベテラン
会議室デビュー日: 2003/08/14
投稿数: 91
お住まい・勤務地: KANAGAWA
投稿日時: 2005-12-15 12:55
http://www.javaroad.jp/opensource/js_struts17.htm
わか
常連さん
会議室デビュー日: 2003/12/14
投稿数: 47
お住まい・勤務地: 広島市
投稿日時: 2005-12-15 13:31
アティ さま

なるほど!!大変良く分かりました。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)