* Strutsハマった事 [#d3d6d838] [エラー内容] どのスコープにもBean org.apache.struts.taglib.html.BEAN がありません [原因・解決方法] formの外でproperty設定してるタグがあった。 // [エラー内容] アクションフォームBeanでのDB検索結果がなぜかキャッシュされる。 [原因・解決方法] struts-config.xmlの <action>属性でscopeを指定していなかった。 // [やりたい事] メッセージリソースファイルを分割したい [解決方法] sturts-config.xmlを以下のように編集 <message-resources parameter="MessageResources" /> <message-resources parameter="ButtonResources" key="BTN" /> ※2つ目以降の定義には keyの指定は必須 jsp側では <bean:message key="buttons.update" bundle="BTN" /> のようにbundleを指定する必要がある。 // [エラー内容] メッセージリソースファイルを使用して表示した日本語が文字化けする [原因・解決方法] Java2SDK付属の native2ascii を利用してファイルを Unicode に変換する。 native2ascii xxxxxxx.properties.txt xxxxxxxx.properties // [エラー内容] LookupDispatchActionを使用して複数のボタンを配置時に <html:submit property="method"> <bean:message key="register"/> </html:submit> とボタンを指定してのkey属性に リソースファイルに指定したkeyを使い ここのkeyに対応した値にascii文字以外を指定すると javax.servlet.ServletException: Action[/sample/TestUpdate]でキーメソッドマップの中にリソース !)!)!)!) が見つかりません というエラーがでる。(native2asciiで変換していても同じ。) [原因・解決方法] (1)RequestProcessorのサブクラスをつくって、エンコーディングする処理をいれてコンパイル package sample; import org.apache.struts.action.RequestProcessor; import javax.servlet.http.*; public class MyRequestProcessor extends RequestProcessor{ public boolean processPreprocess(HttpServletRequest request,HttpServletResponse response){ try{ request.setCharacterEncoding("Windows-31J"); }catch(Exception e){ System.err.println("MyRequestProcessor#processPreprocess:" + " fail to setCharacterEncoding"); } return true; } } (2)struts-config.xmlに作ったクラスを使用する設定をいれる <controller processorClass="sample.MyRequestProcessor" /> (3)tomcatをrestart // [エラー内容] DispatchActionを使用してFORMに複数ボタンを配置時にValidateの機能を使っていると、 入力チェックしないでいいボタンが押されたときも入力チェックが実行されてしまう。 [原因・解決方法] ◆クライアント側の回避方法 実験中 ◆サーバ側の回避方法 実験中 // [エラー内容] JSP表示時にCannot retrieve definition for form bean 「Actionフォーム名」エラーが発生する [原因・解決方法] struts-config.xmlの<action-mappings>のnameで定義しているフォームが <form-beans></form-beans>で定義されていない。 // [エラー内容] ライブラリに含まれるバッチクラスが実行できない。 Exception in thread "main" java.lang.NoClassDefFoundErrorが発生する。 [実行した内容] java -classpath "c:\xxx\xxx\xxx.jar;c:\xxx\xxx\xxx.jar;c:\xxx\classes" a64\service\クラス名 [原因・解決方法] 引数の与え方、実行方法が全然違うかった。 正しくは java -classpath "c:\xxx\xxx\xxx.jar;c:\xxx\xxx\xxx.jar;c:\xxx\classes" a64.service.クラス名 のようなカンジ。