名探偵再び。(2)

さっきの stdout.log の内容から、validate 関数の呼び出しに使われたアクションは LoginAction でリクエスト元は Login.jsp だと判断できる。
struts-config.xml 内の記述 validate = true と input = "Login.jsp" であると言う事。とこれまでのエンジニアの経験から判断して struts-config.xml は問題ない気がする。

struts-config.xml(抜粋)

<action path="/Login" type="LoginAction" name="loginForm" scope="request" input="Login.jsp" validate="true">

この時点で容疑者4人(LoginForm.java/struts-config.xml/validation.xml/Login.jsp)のうち2人までは、少し容疑が晴れた。では次に取調べ室に連行する相手は必然的に

validation.xml(容疑者)再掲

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE form-validation PUBLIC
          "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
          "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
<form-validation>
  <formset>
    <form name="LoginForm">
      <field property="userID" depends="required,maxlength">
        <arg0 key="ユーザーID" resource="false" />
        <arg1 name="maxlength" key="${var:maxlength}" resource="false" />
        <var>
          <var-name>maxlength</var-name>
          <var-value>5</var-value>
        </var>
      </field>
      <field property="password" depends="required,maxlength">
        <arg0 key="パスワード" resource="false" />
        <arg1 name="maxlength" key="${var:maxlength}" resource="false" />
        <var>
          <var-name>maxlength</var-name>
          <var-value>5</var-value>
        </var>
      </field>
    </form>
  </formset>
</form-validation>

この中で明らかに間違っていない部分を削る。

    <form name="LoginForm">
      <field property="userID" depends="required,maxlength">
        <arg0 key="ユーザーID" resource="false" />
      </field>
      <field property="password" depends="required,maxlength">
        <arg0 key="パスワード" resource="false" />
      </field>
    </form>

んんん。くんくんくん。

の name 属性ってほんまにクラス名なのか?
これはかなり怪しい気がする。
struts-config.xml(抜粋)

  <form-beans>
      <form-bean name="loginForm" type="LoginForm" />
  </form-beans>

じぶん、タイプとネームまちごーてんちゃうん?

validation.xml(抜粋:修正箇所)

×  <form name="LoginForm">
○  <form name="loginForm">

と書き直して、ババン!(2度目)

HTTPステータス 500 - 

--------------------------------------------------------------------------------

type 例外レポート

メッセージ 

説明 The server encountered an internal error () that prevented it from fulfilling this request.

例外 

java.lang.IllegalArgumentException: パス Login.jsp が"/"文字で始まりません
  org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1049)
  org.apache.struts.action.RequestProcessor.internalModuleRelativeForward(RequestProcessor.java:994)
  org.apache.struts.action.RequestProcessor.processValidate(RequestProcessor.java:959)
  org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:206)
  org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
  org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


注意 原因のすべてのスタックトレースは、Apache Tomcat/5.0.28のログに記録されています


--------------------------------------------------------------------------------

Apache Tomcat/5.0.28

よっしゃ!出たー(エラーやけど)さっすが名探偵。

しかもエラーが

java.lang.IllegalArgumentException: パス Login.jsp が"/"文字で始まりません

そこまで教えてくれたらここしか無いでしょう!って感じで

× <action path="/Login" type="LoginAction" name="loginForm" scope="request" input="Login.jsp" validate="true">
○ <action path="/Login" type="LoginAction" name="loginForm" scope="request" input="/Login.jsp" validate="true">

なんとなく勝利の栄光を手にする日は近い気がしてきた。