- PR -

Strutsのタグで数値だけ表示されない。

1
投稿者投稿内容
Tatsuya
ベテラン
会議室デビュー日: 2007/04/02
投稿数: 53
投稿日時: 2007-04-13 15:27
ログイン処理でDBからユーザー情報を取得し、ログイン後の画面でステータスを表示させているのですが、数値だけ表示されません。文字列は正常に表示されます。

UserFormというオブジェクトの中にステータスを入れているのですが、オブジェクトの中には値が入っているのですが、jspで表示しようとするとエラーが起こります。

エラー内容は以下のとおりです。

javax.servlet.ServletException: キー org.apache.struts.action.MESSAGE に対するメッセージリソースが見つかりません
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:846)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
org.apache.jsp.home_jsp._jspService(home_jsp.java:74)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.struts.chain.commands.servlet.PerformForward.handleAsForward(PerformForward.java:113)
org.apache.struts.chain.commands.servlet.PerformForward.perform(PerformForward.java:96)
org.apache.struts.chain.commands.AbstractPerformForward.execute(AbstractPerformForward.java:54)
org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
filter.CloseThreadLocalSessoinFilter.doFilter(CloseThreadLocalSessoinFilter.java:19)
filter.EncodingFilter.doFilter(EncodingFilter.java:19)


原因

javax.servlet.jsp.JspException: キー org.apache.struts.action.MESSAGE に対するメッセージリソースが見つかりません
org.apache.struts.taglib.TagUtils.retrieveMessageResources(TagUtils.java:1112)
org.apache.struts.taglib.TagUtils.message(TagUtils.java:956)
org.apache.struts.taglib.TagUtils.message(TagUtils.java:936)
org.apache.struts.taglib.bean.WriteTag.retrieveFormatString(WriteTag.java:264)
org.apache.struts.taglib.bean.WriteTag.formatValue(WriteTag.java:321)
org.apache.struts.taglib.bean.WriteTag.doStartTag(WriteTag.java:241)
org.apache.jsp.home_jsp._jspx_meth_bean_005fwrite_005f0(home_jsp.java:146)
org.apache.jsp.home_jsp._jspx_meth_html_005fhtml_005f0(home_jsp.java:101)
org.apache.jsp.home_jsp._jspService(home_jsp.java:65)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.struts.chain.commands.servlet.PerformForward.handleAsForward(PerformForward.java:113)
org.apache.struts.chain.commands.servlet.PerformForward.perform(PerformForward.java:96)
org.apache.struts.chain.commands.AbstractPerformForward.execute(AbstractPerformForward.java:54)
org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
filter.CloseThreadLocalSessoinFilter.doFilter(CloseThreadLocalSessoinFilter.java:19)
filter.EncodingFilter.doFilter(EncodingFilter.java:19)


_________________
すみょし
常連さん
会議室デビュー日: 2007/01/25
投稿数: 36
投稿日時: 2007-04-13 15:34
こんにちは。

JSP側の記述かstruts-config.xmlの記述が原因かなぁ、と。

以下のURLに次の通りに記述されていました。


<bean:message> or struts-config.xml の記述ミス。
属性 bundle の値が struts-config.xml 中、<message-resources> の属性 key の値と異なっている場合。リソースファイル中に存在しない場合

http://grape.sapid.org/tutorial/lec2.html#javax.servlet.ServletException%3A+%83%4C%81%5B+xxx+%82%C9%91%CE%82%B7%82%E9%83%81%83%62%83%5A%81%5B%83%57%83%8A%83%5C%81%5B%83%58%82%AA%8C%A9%82%C2%82%A9%82%E8%82%DC%82%B9%82%F1
Tatsuya
ベテラン
会議室デビュー日: 2007/04/02
投稿数: 53
投稿日時: 2007-04-13 15:42
>> すみょしさん
回答ありがとうございました。

JSP側には

<bean:write name="userForm" property="id" scope="request" />

と記述しています。
他の文字列プロパティはきちんと表示されているので、struts-config.xmlには問題ないと思うんですが。

<bean:write />タグでなんでmessageのことがエラーとなっているのかが

_________________


[ メッセージ編集済み 編集者: Tatsuya 編集日時 2007-04-13 15:47 ]
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2007-04-13 15:54
メッセージリソースを追加してから classes ディレクトリにコピーされていないとか、再デプロイされていないとか?
すみょし
常連さん
会議室デビュー日: 2007/01/25
投稿数: 36
投稿日時: 2007-04-13 17:16
引用:

Tatsuyaさんの書き込み (2007-04-13 15:42) より:
JSP側には

<bean:write name="userForm" property="id" scope="request" />

と記述しています。
他の文字列プロパティはきちんと表示されているので、struts-config.xmlには問題ないと思うんですが。

<bean:write />タグでなんでmessageのことがエラーとなっているのかが



んー。
こんなのも見つかりました。
http://www.javaroad.jp/opensource/js_struts9.htm
より

引用:

※<bean:write>タグから数値型のプロパティを参照する際はformat属性、 もしくはformatKey属性を指定する必要があります。指定していない場合は、メッセージ・リソースファイルのorg.apache.struts.taglib.bean.format.int(整数型)、org.apache.struts.taglib.bean.format.float(浮動小数点型)のキーが参照されます。キーが指定されていない場合はエラーになります。
(例) org.apache.struts.taglib.bean.format.int=###



たぶんテキストボックスとかには問題なく表示されるような気がします。
上記記述からすると、数値表示のためにはメッセージ・リソースファイルを
必ず用意しないといけないみたいです。

と、思ったんですが、実際確認してみたところ、リソースファイルなくても表示されました。
tldとか、FormとJSPの参照名の一致とかその辺から確認したほうが良いかもです。
Tatsuya
ベテラン
会議室デビュー日: 2007/04/02
投稿数: 53
投稿日時: 2007-04-16 10:18
>> すみょしさん

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

<bean:write name="userForm" property="id" scope="request" format="######"/>

のように、format属性を追加したところ、無事に数値が表示されました。
う〜む、なんか、煮え切らない感じです^^;
_________________
1

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