- フォワード先が空白になる
・mapping.findForward()で指定したフォワード名がstruts-config.xmlのActionの定義に書かれていない。
・Actionがexecuteメソッドをオーバーライドしていない。またはメソッド名が間違っているため、正しくオーバーライドできていない。
・Actionのexecuteメソッドのシグネチャが異なるため、正しくオーバーライドできていない。
- JSP文書にアクセスするとJavaScriptエラー
・html:formタグのfocus属性に書かれた名前の入力欄(プロパティ)が存在しない。
- サーブレット action が利用できません
struts-config.xmlの構文エラー、またはcontrollerタグやpluginタグに記述したクラスがロードできないなどの理由で、ActionServletの初期化に失敗している。→サーブレットコンテナのログを見て、エラー原因を解消します。
- javax.servlet.ServletException: Exception creating bean of
class...:{1}
・struts-config.xmlのform-beanに書いたクラスが存在しない。
・struts-config.xmlのform-beanに書いたクラスがActionFormを継承していない。
・struts-config.xmlのform-beanに書いたクラスがインスタンス化できない(例:抽象クラス、引数のないpublicのコンストラクタがない)
・struts-config.xmlのform-beanに記述するDynaActionFormなどのクラス階層が間違っている(org.apache.struts.action.とorg.apache.struts.validator.に注意。またDynaActionFormのつもりで間違ってActionFormと書いていないかにも注意。ActionFormは抽象クラスなのでインスタンス化できません)
- html:formの入力内容が自作Form Beanに保存されない
・ActionFormやValidatorFormではなく、DynaActionFormを継承してFormBeanを作っている。
- HTTP Status 500: No action instance for path /***Action
couldbecreated
・struts-config.xmlでActionクラスに指定したクラスが存在しない。
- No action instance for path /***Action could
becreatedjava.lang.ClassCastException
atorg.apache.struts.action.RequestProcessor.processActionCreate(RequestProcessor.java:326)
・struts-config.xmlでActionクラスに指定したクラスがActionを継承していない。
- validation.xmlによるバリデーションが効かない
・struts-config.xmlにValidationプラグインを書いていない
・validator-rules.xml、validation.xmlが/WEB-INFに存在しない。
・struts-configのActionの定義でvalidate="true"になっていない。
・Actionが指定するFormBeanがDynaValidatorFormではなく自作Beanで、その中にvalidate()メソッドが実装されていない。
・struts.jarとvalidator-rules.xmlのバージョンが合っていない(ログを注意深く見るとエラーになっているはず)
-
入力が正しいはずなのにバリデーションエラーになる
・validation.xmlのfieldproperty=のプロパティ名が間違っている(存在しない)
-
フォームに前回入力した内容が保持されていない
・Actionのscopeがrequestになっている(入力内容を保持するにはsessionにするか、何も書かない)
・html:textタグなどでvalue属性で初期値を設定している
-
メッセージ・リソースを参照したメッセージが表示されない
・struts-config.xmlのmessage-resourcesにApplicationPropertiesの設定を書いていない。
・struts-config.xmlのmessage-resourcesのクラス階層が間違っている(他アプリケーションのstruts-config.xmlを流用したときなどに大注意)
・ApplicationResources.propertiesファイルの更新漏れ(日本語は直で書けないので他所で編集することが多いが、最終的な.propertiesファイルの置き場所に反映できていない)
・JSPにtaglibディレクティブでbeanタグライブラリの宣言をしていない(ページのソースを表示すると、bean:writeタグがそのまま出力されているケース)
- javax.servlet.UnavailableException: Parsing error
processingresourcepath
・struts-config.xmlのmessage-resourcesの中がリソース・パスとして認識できない。またはその直前のコメントの開閉タグがおかしく、message-resourcesタグが正しく認識されていない。
-
javax.servlet.ServletException:DispatchMapping[/Actionマッピング]does
not define a handlerproperty
・DispatchActionを継承したActionクラスに対して、struts-config.xmlのActionの設定でparameter属性を書いていない。
- Request[/Actionマッピング] does not contain handler
parameternamed{パラメータ名}
・LookupDispatchActionで、Actionの設定に書いたparameter属性の値と、JSP文書のフォームのhtml:submitタグのpropertyの値が違う。
・LookupDispatchActionで、Submitボタンのラベルとして使うキーに日本語を使っているが、リクエスト変数のエンコーディングの設定をしていない(Strutsメモのエンコーディングの設定をすると直る)
- Action.execute()で引数のformがnull
・struts-config.xmlでname、attribute属性を設定していない。
- javax.servlet.ServletException: Cannot retrieve definition for
formbeannull
・JSPの中に、html:formタグがあるとして、そのaction属性で指定されたActionをAとします。struts-config.xmlのアクションAの定義に、name、attribute属性が設定されていないとこのエラーになります。
- javax.servlet.ServletException: No getter method for property ***
ofbeanorg.apache.struts.taglib.html.BEAN
・あるJSPにフォームFがあるとします。
Fにはhtml:textタグなどでpropery="p"という指定のタグがあるとします。
Fのaction=で指定しているActionをAとします。
Aにstruts-config.xml上でマップされているフォームアクションBeanをBとします。
Bのstruts-config.xml上の定義に、プロパティ"p"が存在しないとこのエラーになります。
- javax.servlet.jsp.JspException: Cannot find
ActionMappingsorActionFormBeans collection
・サーブレットコンテナのログを見たら相当致命的な別のエラーが出ている。それを直すと解決する(かも)
- javax.servlet.UnavailableException: Initializing application
datasourceorg.apache.struts.action.DATA_SOURCE
・struts-config.xmlのdata-sourceタグで指定している接続ぷーリングつきのデータソースに接続できない。DBMSがダウンしていないか、接続情報が正しいかを確認します。
- java.lang.NullPointerException: 空の属性名です
atorg.apache.jasper.runtime.PageContextImpl.findAttribute(PageContextImpl.java:450)
・logic:iterateカスタムタグで、コレクション要素を(name、name+property、collectionのいずれかの属性で)指定していない。
- The requested resource (/***) is not available.(HTTP ERROR 404)
・struts-config.xmlのActionの定義で、input属性で指定したパスの文書が存在しない。(先頭にスラッシュがついているかどうか、拡張子がついているかも注意)
- No input attribute for mapping path /***
・Actionのバリデーションに引っかかったが、struts-config.xmlのActionの定義で、input属性で戻るパスを指定していない。
-
java.lang.NullPointerExceptionorg.apache.commons.beanutils.PropertyUtils.getIndexedProperty(PropertyUtils.java:515)
・(エラーの内容は場合によって異なるはずです)BeanUtils.populateでNullPointerExceptionが発生するよくある原因は、FormBeanのスコープをrequestにしているのに、2画面以上のActionの情報の受け渡しに使おうとしている場合です。素直にスコープをsessionにします。
-
nested:iterateループの中でbean:writeを使ってもnestedのBeanのプロパティを印字できない
・bean:writeのnested版でnested:writeというタグがあります。nested:writeの属性はname=ではなくproperty=なので注意。