nasu @Wiki

Struts トラブルシューティング

最終更新:

匿名ユーザー

- view
だれでも歓迎! 編集
  • フォワード先が空白になる
    ・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=なので注意。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

記事メニュー
目安箱バナー