- PR -

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

投稿者投稿内容
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2003-11-12 12:43
Strutsに関する質問です。

環境
Struts1.1
Tomcat5.0.12
Java2 SDK 1.4.1_02

Webアプリ内に、とあるJSPファイルを作成し、以下の2行目のほうを記述するとWebブラウザにエラーが表示されます。(1行目のみなら問題なし)

<jsp:useBean id="MyBean" scope="request" class="foo.baa.MyBean"/>
<bean:write name="MyBean" property="name"/>

[exception]
javax.servlet.ServletException: Cannot find message resources under key org.apache.struts.action.MESSAGE
:
:
[root cause]
javax.servlet.jsp.JspException: Cannot find message resources under key org.apache.struts.action.MESSAGE
:
:

その後struts-blank.war より、
WEB-INF/classes/resources/application.properties
をコピー、struts-config.xmlに、
<message-resources parameter="resources.application"/>
を追加したところ、エラーは解消しました。
(それまでmessage-resources要素は何も定義していませんでした)

以上の現象に関し、エラーの発生した根本の原因と、エラーが解消した理由をお教えいただけないでしょうか。
よろしくお願いします。
_________________
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2003-11-12 14:26
引用:

コード:
javax.servlet.ServletException: Cannot find message resources under key org.apache.struts.action.MESSAGE




そのままですが、Strutsのbean:messageタグに必要なメッセージリソースファイルが無いということですね。

引用:

その後struts-blank.war より、
コード:
WEB-INF/classes/resources/application.properties


をコピー、struts-config.xmlに、
コード:
<message-resources parameter="resources.application"/>


を追加したところ、エラーは解消しました。


この対応で良いと思います。
まず、配置場所が
コード:
WEB-INF/classes/resources/application.properties

となる件ですが、これはWebアプリの仕様で、
コード:
WEB-INF/classes

が自動的にクラスパスに追加されるため、ここに置いたresources/application.propertiesというファイルはresourcesパッケージのapplication.propertiesというファイルとして扱われます。
次に、message-resourceの設定でresources.applicationと指定しているということは、resourceというパッケージに入っているapplication.propertiesというファイルを検索する、という意味です。
bean:messageタグは、message-resourceで指定されたリソース(プロパティファイル等)に入っているメッセージを表示するためのStrutsタグライブラリです。

ちなみに、Webコンテナ(ここではTomcat5ですね)の起動時のロケールによって、読み出すファイルが微妙に変わります。ロケールがjaならresources_ja.propertiesが読み出されますし、ロケールがen_USならresource_en_US.propertiesが読み出されます。これにより、ロケールに対応したメッセージを表示するようなWebアプリが作れます。

読み出しの順序は、例えばロケールがja_JPなら
STEP1: resource_ja_JP.propertiesを読み出す。無ければSTEP2へ
STEP2: resource_ja.propertiesを読み出す。無ければSTEP3へ
STEP3: resource.propertiesを読み出す。無ければエラー。
となります。
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2003-11-12 15:41
おばけさん、ご回答どうもありがとうございます。
Java標準の動作と同様にして、Webアプリケーションも理解できるということですね。

ただ、1つ疑問が晴れないのは、

引用:

おばけさんの書き込み (2003-11-12 14:26) より:
引用:

コード:
javax.servlet.ServletException: Cannot find message resources under key org.apache.struts.action.MESSAGE




そのままですが、Strutsのbean:messageタグに必要なメッセージリソースファイルが無いということですね。



使用したのはbean:writeタグで、bean:messageタグは使用していないんですよ。
これら2つの間には何か関連があるのでしょうか?
とまと
ベテラン
会議室デビュー日: 2003/10/18
投稿数: 51
投稿日時: 2003-11-12 15:54
こんにちは。

例外メッセージを元にどうしてStrutsのソースコードを
見ないのでしょうか?
せっかくオープンソースなのですから。
ソースを見ることで新たな発見が見つかるかもしれませんよ。

※もし、他人に問題を解決させ、その間に自分の仕事を
 したいということでしたら、この投稿は無視してください。
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2003-11-12 16:23
引用:

とまとさんの書き込み (2003-11-12 15:54) より:
例外メッセージを元にどうしてStrutsのソースコードを
見ないのでしょうか?



見ますよ。
この掲示板で解決しなければ。

引用:

せっかくオープンソースなのですから。
ソースを見ることで新たな発見が見つかるかもしれませんよ。

※もし、他人に問題を解決させ、その間に自分の仕事を
 したいということでしたら、この投稿は無視してください。



では、無視しないことにします。

まず初めに、私自身は文章の中に、「自分の代わりに調査して」という意味を込めたつもりは毛頭ございません。

ただし私の文章が私自身がそのような無責任な人間だと思わせる何かを他人に感じさせてしまったとしたら、私にも責任の一端はありますのでその旨ご指摘下さい。

ところで、そう言われてしまうと、この掲示板では何を質問することが許可されているのやらよく分からなくなってしまいますが、この掲示板には最近出入りするようになったばかりで私がここのルールというものを理解していないのかもしれません。
まあ、明示してあるルールには目を通しているつもりですが。

もしかしたら、ソースを見てからでないと質問してはならない、という暗黙のルールが存在します?

あぁ、技術的なネタが何もない発言でごめんなさい。
あまりにも失礼な発言にあまりにも気分を害したもので・・・。
とまと
ベテラン
会議室デビュー日: 2003/10/18
投稿数: 51
投稿日時: 2003-11-12 17:08
こんにちは。

引用:

カーニーさんの書き込み (2003-11-12 16:23) より:
見ますよ。
この掲示板で解決しなければ。


あなたはソースを見れば解決できるとわかっているのに
質問したということでしょうか?
どうして、先にソースを見ないのでしょうか?

引用:

まず初めに、私自身は文章の中に、「自分の代わりに調査して」という意味を込めたつもりは毛頭ございません。
ただし私の文章が私自身がそのような無責任な人間だと思わせる何かを他人に感じさせてしまったとしたら、私にも責任の一端はありますのでその旨ご指摘下さい。


あなたが「自分の代わりに調査して」と思っていると
私が言ったでしょうか?
でも、先の発言を見るといわゆる「おしえてクン」であると
ご自身で認めたように思います。

引用:

ところで、そう言われてしまうと、この掲示板では何を質問することが許可されているのやらよく分からなくなってしまいますが、この掲示板には最近出入りするようになったばかりで私がここのルールというものを理解していないのかもしれません。
まあ、明示してあるルールには目を通しているつもりですが。

もしかしたら、ソースを見てからでないと質問してはならない、という暗黙のルールが存在します?

あぁ、技術的なネタが何もない発言でごめんなさい。
あまりにも失礼な発言にあまりにも気分を害したもので・・・。


私はあなたを怒らせるために投稿したわけではありません。
あなたがStrutsがオープンソースであることを知らないのではと思い、
問題解決方法を提示したつもりです。
最近では、様々なオープンソースなプロダクトを
組み合わせて開発を行うケースが多いため、
様々なエラー・問題が起こる可能性があるでしょう。
その場合の有効な問題解決方法の1つとして
公開されているソースを調べるというのがあると思います。
個々の問題を掲示板に投稿して解決するという方法もありますが、
ソースを調べた方がより早く問題解決する場合も多いでしょう。
でも、あなたはこの解決方法を知っていて、
あえて掲示板への投稿を選択したのですよね。

ボム
ベテラン
会議室デビュー日: 2003/07/25
投稿数: 61
投稿日時: 2003-11-12 18:30
横槍をさすような発言で申し訳ありません。

とまとさんのおっしゃりたい事はわかりますが、
>※もし、他人に問題を解決させ、その間に自分の仕事を
>したいということでしたら、この投稿は無視してください。

これではカーニーさんに
>「自分の代わりに調査して」
と、とられても仕方ないと思います。
私も、「他人に問題を解決させ、その間に自分の仕事をしたい」 = 「自分の代わりに調査して」と読めました。

また
>私はあなたを怒らせるために投稿したわけではありません。
とのことでしたら、
>でも、先の発言を見るといわゆる「おしえてクン」であると
>ご自身で認めたように思います。
このような発言をひかえたほうがよろしいかと思われます。

スレッドに意味を持たない意見をした事を謝罪します。
とまと
ベテラン
会議室デビュー日: 2003/10/18
投稿数: 51
投稿日時: 2003-11-12 19:02
こんばんは。

引用:

ボムさんの書き込み (2003-11-12 18:30) より:
とまとさんのおっしゃりたい事はわかりますが、
>※もし、他人に問題を解決させ、その間に自分の仕事を
>したいということでしたら、この投稿は無視してください。

これではカーニーさんに
>「自分の代わりに調査して」
と、とられても仕方ないと思います。
私も、「他人に問題を解決させ、その間に自分の仕事をしたい」 = 「自分の代わりに調査して」と読めました。


おっしゃるとおりです。
それはイコールです。
ただ、私はカーニーさんがそうであるとは言っていません。
もし、そう(おしえてクン)ならば、
私の言いたいこと
・ソースを見て調べると早く問題解決できる場合がある
・また色々なことを学べるチャンスである
・これは有効かつ応用が利く問題解決方法である
は、おしえてクンにとっては
全く意味を持たない発言なので無視して下さい、
と言っただけです。

おしえてクンについてはここを参照してください

引用:

>私はあなたを怒らせるために投稿したわけではありません。
とのことでしたら、
>でも、先の発言を見るといわゆる「おしえてクン」であると
>ご自身で認めたように思います。
このような発言をひかえたほうがよろしいかと思われます。


これをどう取るかはカーニーさん次第ではないでしょうか。
もし、私がカーニーさんの立場なら、
すぐにソースを調べて問題の原因を突き止め、投稿するでしょう。
ソースを見てわからなければ、それについて色々調べたり、
あるいはソースレベルで新たな質問をしたりするかもしれません。
気分は悪いのかもしれませんが、
より前向きに考えれば
ソースで調べるという方法が非常に有効な方法であるということを
実感できるでしょう。

Strutsカスタムタグを使っていれば、色々な問題が起こります。
Strutsに関してユーザガイドや書籍には記述されていないようなことを
知りたい場合もあるでしょう。
その場合は「すべて」掲示板に投稿することが当たり前と
思っている人は、なかなか問題解決できないでしょう。
私はこれがカーニーさんにとって
ご自身を改善するための良い機会になればと思っています。
余計なお世話かもしれませんが。。。

これについては本題である問題(Strutsカスタムタグ)の原因が
わかるまで保留しましょう。
カーニーさんならご自身で解決されると思います。

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