DynaActionForm 実践編。
LoginAction.java
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.DynaActionForm; public class LoginAction extends Action { public ActionForward execute(ActionMapping map, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { DynaActionForm dynaForm = (DynaActionForm) form; String user = (String) dynaForm.get("userID"); String pass = (String) dynaForm.get("password"); if (user.equals("mirai")) { if (pass.equals("conan")) { return map.findForward("next"); } } return map.findForward("reject"); } }
<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> <struts-config> <data-sources /> <form-beans> <form-bean name="loginForm" type="org.apache.struts.action.DynaActionForm"> <form-property name="userID" type="java.lang.String" initial="" /> <form-property name="password" type="java.lang.String" initial="" /> <form-bean/> </form-beans> <global-exceptions /> <global-forwards /> <action-mappings> <action path="/Login" type="LoginAction" name="loginForm" scope="request" input="/Login.jsp" validate="true"> <forward name="next" path="/loginSuccess.jsp"/> <forward name="reject" path="/rejectUser.jsp"/> </action> </action-mappings> <message-resources parameter="MessageResources" /> <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>
で準備完了。それっとババン!
HTTPステータス 500 - -------------------------------------------------------------------------------- type 例外レポート メッセージ 説明 The server encountered an internal error () that prevented it from fulfilling this request. 例外 javax.servlet.ServletException: ActionMappingsまたはActionFormBeansコレクションが見つかりません org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825) org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758) org.apache.jsp.Login_jsp._jspService(Login_jsp.java:81) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 原因 javax.servlet.jsp.JspException: ActionMappingsまたはActionFormBeansコレクションが見つかりません org.apache.struts.taglib.html.FormTag.lookup(FormTag.java:711) org.apache.struts.taglib.html.FormTag.doStartTag(FormTag.java:419) org.apache.jsp.Login_jsp._jspx_meth_html_form_0(Login_jsp.java:150) org.apache.jsp.Login_jsp._jspx_meth_html_html_0(Login_jsp.java:111) org.apache.jsp.Login_jsp._jspService(Login_jsp.java:72) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 注意 原因のすべてのスタックトレースは、Apache Tomcat/5.0.28のログに記録されています -------------------------------------------------------------------------------- Apache Tomcat/5.0.28
これだけでは何もわからないのでログを見る
C:\Program Files\Apache Software Foundation\Tomcat 5.0\logs\localhost_log.2004-12-06.txt(抜粋)
2004-12-06 18:35:52 StandardContext[/test]サーブレット /test がload()例外を投げました javax.servlet.UnavailableException: パス /WEB-INF/struts-config.xml に対するリソース読み込みエラー at org.apache.struts.action.ActionServlet.handleConfigException(ActionServlet.java:739) at org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:715) at org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:670) at org.apache.struts.action.ActionServlet.init(ActionServlet.java:329) at javax.servlet.GenericServlet.init(GenericServlet.java:211)
げげげ、struts-config のパースミスって事は書式がおかしいのか。
<form-beans> <form-bean name="loginForm" type="org.apache.struts.action.DynaActionForm"> <form-property name="userID" type="java.lang.String" initial="" /> <form-property name="password" type="java.lang.String" initial="" /> <form-bean/> </form-beans>
確かにおかしい部分がある。xml ファイルで構文にエラーがある場合はたいてい
- 開始タグと閉じタグの関係がおかしい。(閉じタグが無いとか)
- タグ内の要素でリテラルの閉じ記号とかを忘れてる(type="aaa name="jjj"みたいに)
になってると思う。
さて今回は。
ずばり抜粋の5行目の
×
○
で、修正してババン!(2度目)
出たー!ばっちり、つーか簡単。ちゃんとエラーチェックも通らなくなってる。完勝!