Struts1.3.5トラブルシューティング

とらぶりゅうは13章まであるらしい。

フィルタでエラー

java.lang.NullPointerException
  at org.apache.struts.config.FormBeanConfig.createActionForm(FormBeanConfig.java:286)

struts-config.xmlのform-beanにフォームが設定されていないから作れないということ。struts-config.xmlを確認すること。フィルタでエラーがでるのは、遷移先がおかしいのでフィルタででちゃう。

 

JSTLでタグの属性にEL式を書くとエラー

<c:out value="${param.id}" />

みたいに使えなかった。どうもweb.xmlがServlet2.3になっていたようだ。2.3ではデフォルトでEL式が動かないらしい。

<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC
  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  "http://java.sun.com/dtd/web-app_2_3.dtd">

これを2.4にする。

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">

Action[/login]でキーメソッドマップの中にリソース {1} が見つかりません

メッセージリソースが見つからなかった。

Path XXXXXX does not start with a “/” character

tilesの定義名が有効にならない。XXXXXXにはtilesで定義した値(topとか)が入る。struts-config.xmlのActionタグでpath属性にtilesの定義名を指定すると以下のエラーが発生する。

警告: Unhandled exception
java.lang.IllegalArgumentException: パス top が"/"文字で始まりません
java.lang.IllegalArgumentException: Path top does not start with a "/" character

ためしにJBossを動かしてみると以下のエラーがでていることがわかった。

00:40:41,679 ERROR [STDERR] 2007/02/18 0:40:41 org.apache.struts.validator.ValidatorPlugIn initResources
情報: Loading validation rules file from '/org/apache/struts/validator/validator-rules.xml'
00:40:41,679 ERROR [STDERR] 2007/02/18 0:40:41 org.apache.struts.validator.ValidatorPlugIn initResources

調べること2日

原因は不明だが解決策は判明。

http://sabrenews.blogspot.com/2007/01/javaxservletservletexception-path.html

web.xmlのActionServletに以下のパラメタを追加する。

<init-param>
  <param-name>chainConfig</param-name>
  <param-value>
    org/apache/struts/tiles/chain-config.xml
  </param-value>
</init-param>

実物のchain-config.xmlは以下のフォルダにある。上記ではクラスパスで指定している。

//struts-1.3.5-all.zip
struts-1.3.5/src/tiles/src/main/resources/org/apache/struts/tiles

これでなんでできるかは謎。WebLogic9.1Jではエラーが出てなかった気がするんだけどねー。

Module ‘null’ not found.

web.xmlでActionServletにload-on-startupを指定しないと初期化に失敗する。この要素は必須。

<load-on-startup>1</load-on-startup>