- PR -

StrutsのValidatorでエラーが起こったあとの遷移先

1
投稿者投稿内容
まいこ
会議室デビュー日: 2005/07/01
投稿数: 9
投稿日時: 2005-07-06 14:54
*****  環境  *************************************************

・Windows2000(SP4)
・Tomcat5.0.28
・j2sdk1.4.2
・Eclipse2.1.3
・struts1.2.4



*****  状況  *************************************************

MY_cre_upd.jspで、submitボタンを押下した場合、
StrutsのValidatorFormのValidateメソッドが走り、
エラーの場合は、err.doのActionに行くという処理を行いたいのですが、

HTTPステータス 500 - パス /err に対するアクションのインスタンスがありません

と怒られてしまいます。
どなたか、ご教授いただけないでしょうか?

ちなみに、<action path="/input"〜のところの、
input="/err.do"を、input="/init.do"にすると、
init.doのアクションに行くのですが・・・。



*****  フォルダ構成  *************************************************

WEB-INF
|-- classes
|-- dtd
|-- jsp
| |-- MY_cre_upd.jsp
| |-- MY_cre_err.jsp
| |-- MY_cre_conf.jsp
|-- lib
|-- src
| |--my
| |--action
| |--MY_action_web.java
| |--MY_action_error.java
|-- tld



*****  ソース  *************************************************

[[[ My_cre_upd.jsp(一部) ]]]

<html:form action="/input" method="POST">

<table cellSpacing="0" cellPadding="5" border="1" bordercolor="CCCCAA">
<tr valign="top">
<td class="header"><font size="2">名前</font></td>
<td class="body" align="left">
<html:text property="s_name" name="actionform" styleClass="text" maxlength="40" size="40" />
</td>
</tr>
</table>

<html:submit property="s_submit" value="送信" styleClass="button" style="width:80px;" />

</html:form>



[[[ struts-config.xml ]]]

<struts-config>

<form-beans>
<form-bean type="my.form.MY_form_input" name="inputForm" />
</form-beans>

<global-forwards>
<forward name="inputpage" path="/init.do" />
<forward name="errorpage" path="/err.do" />
</global-forwards>

<action-mappings>
<action path="/init"
type="my.action.MY_action_web">
<forward name="upd" path="/WEB-INF/jsp/MY_cre_upd.jsp" />
</action>
<action path="/err"
type="my.action.MY_action_error">
<forward name="upd" path="/WEB-INF/jsp/MY_cre_err.jsp" />
</action>
<action path="/input"
type="my.action.MY_action_web"
name="inputForm"
scope="request"
input="/err.do"
validate="true">
<forward name="upd" path="/WEB-INF/jsp/MY_cre_conf.jsp" />
</action>
</action-mappings>
<controller nocache="true" />

<message-resources parameter="resources.application"/>

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,
/WEB-INF/validation.xml"/>
<set-property property="stopOnFirstError" value="true"/>
</plug-in>

</struts-config>



*****  結果  *************************************************

2005/07/06 14:33:55 org.apache.struts.action.RequestProcessor processActionCreate
致命的: パス /err に対するアクションのインスタンスがありません
java.lang.ClassCastException
at org.apache.struts.action.RequestProcessor.processActionCreate(RequestProcessor.java:282)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:220)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:704)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:474)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:409)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1056)
at org.apache.struts.action.RequestProcessor.internalModuleRelativeForward(RequestProcessor.java:994)
at org.apache.struts.action.RequestProcessor.processValidate(RequestProcessor.java:959)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:206)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:122)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)



[ メッセージ編集済み 編集者: まいこ 編集日時 2005-07-06 14:55 ]
まいこ
会議室デビュー日: 2005/07/01
投稿数: 9
投稿日時: 2005-07-06 15:33
フォルダ構成がわかりずらいですね。。。

WEB-INF
□□|-- classes
□□|-- dtd
□□|-- jsp
□□|□□|-- MY_cre_upd.jsp
□□|□□|-- MY_cre_err.jsp
□□|□□|-- MY_cre_conf.jsp
□□|-- lib
□□|-- src
□□|□□|--my
□□|□□□□|--action
□□|□□□□□□|--MY_action_web.java
□□|□□□□□□|--MY_action_error.java
□□|-- tld

□の部分はスペースだと思ってください。
(というか、どうやったらスペースが入るのでしょうか???)
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2005-07-06 16:20
るぱんです。

struts configの
actionタグだったと思いますが、

inputという属性があります。
そこらへんの本屋で調べてみると何かつかめると思います。
masa
大ベテラン
会議室デビュー日: 2005/05/11
投稿数: 108
投稿日時: 2005-07-06 16:43
こんにちは。

ClassCastExceptionが発生していますので、
MY_action_error.java の型が怪しいと思います。

org.apache.struts.action.Actionを継承したクラス
になっていますか?
まいこ
会議室デビュー日: 2005/07/01
投稿数: 9
投稿日時: 2005-07-06 22:03
るぱん様・masa様、レスありがとうございます。

まさに、MY_action_errorの継承が抜けておりました!
actionパッケージの中に入れていたので、
もう「extends Action」は書いてある!と思い込んでしまい、
見落としておりました・・・。

お忙しい中、本当にありがとうございました!
1

スキルアップ/キャリアアップ(JOB@IT)