- PR -

Strutsエラー; Cannot find message resources under key org.apache.struts.action.MESSAGE

投稿者投稿内容
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2003-11-12 22:24
なんだか知らぬ間に盛り上がっていますが、、、

引用:

Java標準の動作と同様にして、Webアプリケーションも理解できるということですね。


Webアプリケーションは、まあServletやJSPの仕様を理解していただければ分かると思います。ディレクトリ構造などはそれほど面倒なものでもありませんので。

引用:

使用したのはbean:writeタグで、bean:messageタグは使用していないんですよ。
これら2つの間には何か関連があるのでしょうか?


ここは、私もちょっと分かりません。ただ、タグの関連性というよりは、Strutsの初期化プロセスに関係があるのではないでしょうか。恐らく、Webコンテナ起動時に何らかの処理が行われ、プロパティファイルが無いのでエラーになるのでしょう。

で、詳しいことを知りたい場合は、ソースを覗かれるのが一番手っ取り早いかと思います。特に、Taglibのソースは1つのTaglib(例えばbeanタグ)ごとに1クラス、という対応関係がありますし。(タグと実装クラスのマッピングの詳細はTaglibの定義ファイルをご覧下さい)

まあ、もうこんな時間なので既にソースを読まれたかもしれませんね。
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2003-11-13 00:42
毎度どうもです、カーニーです。

引用:

で、詳しいことを知りたい場合は、ソースを覗かれるのが一番手っ取り早いかと思います。特に、Taglibのソースは1つのTaglib(例えばbeanタグ)ごとに1クラス、という対応関係がありますし。(タグと実装クラスのマッピングの詳細はTaglibの定義ファイルをご覧下さい)

まあ、もうこんな時間なので既にソースを読まれたかもしれませんね。




まだ全然読んでません! ってゆーか、酒飲んでました。
期待されちゃってるんだかなんだか分かりませんが、明日は休暇なので、明後日から
調査開始しますよ。
首尾よく原因究明となれば、改めて報告します。

StrutsのREADMEの通りにWebアプリを設定して出たエラーなので、同じ現象に出遭ってい
る人も多いかと思い聞いてみましたが(その前にググったり)、思わぬ論争を招いてしま
ったようで誠に申し訳ないっ!

カーニー@Strutsは初めてだけど、オープンソース暦8年
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2003-11-14 14:35
こんにちは、カーニーです。
約束どおり調査結果を報告します。

最初の報告では、エラーの出たタグを次のように表現していましたが、
コード:
<jsp:useBean id="MyBean" scope="request" class="foo.baa.MyBean"/>
<bean:write name="MyBean" property="name"/>


理解しやすくするために以下のように訂正して現象の説明をします。
(プロパティの名前をnameからidにしただけです)
コード:
<jsp:useBean id="MyBean" scope="request" class="foo.baa.MyBean"/>
<bean:write name="MyBean" property="id"/>



結論を言うと、メッセージリソースが1つも定義されていないWebアプリケーションにおいて、foo.baa.MyBean.getId() メソッドがint型を返すとき、最初に報告したエラーが発生
します。

int型の値を bean:writeタグで出力する際、Strutsはメッセージリソースから数値の表示
フォーマットの取得を試み、取得に成功するとNumberFormatを使用して整形します。
(そのとき int は Integer などにラップされるはず)

メッセージリソースに必要なフォーマットが定義されていない場合は単に toString() の
結果を表示するので問題ないのですが、利用可能なメッセージリソースが1つもないと件
のエラーになるようです。

アクセスするgetterメソッドがStringを返すときはフォーマットしないので、私が行った
ように適当なメッセージリソースをstruts-config.xmlに定義する以外にも、以下のよう
にすることで回避することが可能です。

コード:
public String getId() {
  return String.valueOf(id);
}



なおint型に限らず、数値系の型・クラスやDateクラスも同様と推測されます。

大まかにソースを追っただけなので、上記の内部動作に関する説明は確実ではないことに
注意して下さい。
もっと時間をかければ発生条件や回避策について正確な情報を得られるかもしれません
が、こちらにも時間的な事情はありますし、今回の質問は単なる技術的興味からのもの
だったので、調査はこれにて打ち切ります。

さて、Strutsをさわり始めたばかりの私にはバグか仕様かの判断ができません。
バグっぽい、かつ上記のレベルの説明で問題なければレポートしようと思いますが、
どなたかアドバイス願います。
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2003-11-14 14:37
さて、とまとさんに対しては言いたいことはいくつもありますが、これについて議論を
重ねるのは他の皆さんに対して迷惑でしょう。
ただしこの手の論争は周囲の人にとって無益な割には、当事者は引くに引けなくなって
しまう性質があります。

失礼ながらとまとさんの過去の発言を拝見しましたが、悪意を持って人に突っかかるよう
な方ではないとの印象を持ちましたので、お互いにあと1回ずつ言いたいこと言って、
手打ちとしましょう。

ただし相手の感情を無用に逆撫でする表現は避けるというルールでお願いします。

--
とまとさんは現実世界においてはとても偉い方なのかもしれません。
しかし、だとしてもそれは私には分かりません。
同様に私のバックグラウンドもとまとさんはご存じないはずです。

であれば、初期のコミュニケーションにおいては、お互い対等な立場の者同士として尊重
し合うべきではないでしょうか。

しかしながら、とまとさんの発言からはそのようなニュアンスが消えていました。
「もしあなたが・・・であれば」という表現は、「この人は・・・である可能性がある」
という疑念を持っていればこそです。
そのような疑念を持つのは一向に構いません。しかし公の場でいきなりそれを表現しない
で頂きたいのです。その返信を受けた私にはそれが「逆説的な非難」に聞こえます。

「おしえてクン」発言は言わずもがな、
引用:

とまとさんの書き込み (2003-11-12 19:02) より:
これをどう取るかはカーニーさん次第ではないでしょうか。
もし、私がカーニーさんの立場なら、
:(snip)
ご自身を改善するための良い機会になればと思っています。
余計なお世話かもしれませんが。。。


これにしても「初心者のカーニーを指導してあげている」というニュアンスを感じて不快
です。
余計なお世話かもしれないと認識しているのであれば、なおさらなぜそれを言わなければ
ならないのか疑問です。

文章というものは書き手の意図とは無関係に、読み手によっていかようにも解釈される
可能性があります。読み手には書き手の意図を正確に理解しようとする努力が求められ
ますが、書き手にも誤解されないような表現をする努力が求められると思います。

それから「なぜ先にソースを見ないか?」ですが、それを言ったらオープンソースソフト
ウェアに関する質問の多くがそれで片付けられてしまうと考えます。

とまとさんの意見は理解できますし、安易に人に頼る姿勢は私も好みませんが、今回の
私の質問に関しては特に問題はなかったと考えていますので、今後も態度を変えること
なく本掲示板には参加し続けるつもりです。

以上の私の考えを受け入れて欲しいとは言いませんが、多様な価値観の1つとしてその
存在を認めていただければと思います。

以上

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