使用 Struts Validator(1)
作者: 来源:it167 点击: 日期:2007-01-28 |
|
|
这段代码做的事情并不多;它只是把 test-validation.jsp 的表单关联到一个新类com.ibm.struts.validation.ValidationAction。这个类我还没有介绍;马上就要编写它的代码。剩下的内容对于任何 Struts 开发人员看起来都应当很典型。它指明了传递给动作的表单的名称、范围以及输入页面。它还开启了验证,至于原因,不言自明。
现在,在访问页面时,将得到新的错误消息(假设做了以上修改,并重新部署了应用程序):
清单 11. 新的错误消息
javax.servlet.ServletException: Cannot retrieve definition for form bean ValidationForm on action /SubmitValid
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
org.apache.jsp.pages.test_002dvalidation_jsp._jspService (org.apache.jsp.pages.test_002dvalidation_jsp:102)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1056)
org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:261)
org.apache.struts.action.RequestProcessor.internalModuleRelativeForward (RequestProcessor.java:994)
org.apache.struts.tiles.TilesRequestProcessor.internalModuleRelativeForward (TilesRequestProcessor.java:343)
org.apache.struts.action.RequestProcessor.processForward(RequestProcessor.java:553)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:211)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
|
这是一个容易修复的问题;只需添加新的 form-bean 元素即可,也是添加到 WEB-INF/struts.config.xml 文件,这个元素定义了表单的 JavaBean,如清单 12 所示:
清单 12. form-bean 元素
<form-beans>
<!-- Other form-bean listings --> <form-bean name="ValidationForm"
type="org.apache.struts.action.DynaActionForm">
<form-property name="username" type="java.lang.String" />
<form-property name="password" type="java.lang.String" />
<form-property name="phone" type="java.lang.String" />
<form-property name="email" type="java.lang.String" />
<form-property name="url" type="java.lang.String" />
</form-bean>
</form-beans>
|
现在就得到了一个可工作的配置。重新部署这些更改,访问欢迎页面,点击链接。应当看到如图 3 所示的验证测试页面:

图 3:现在欢迎屏幕将把您带到测试表单
添加用于进行处理的定制动作
因为不需要考虑什么业务逻辑(只不过是个示例应用程序),所以编写验证表单的定制 Action 很容易,如清单 13 所示:
清单 13. 定制动作
package com.ibm.struts.validation; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward; public class ValidationAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest req,
HttpServletResponse res)
throws Exception { ActionForward forward = null; // Perform some sort of business logic with the data. In this sample,
// we don't care about this; in fact, if the application got here,
// they've already passed validation, and we just need to return success
forward = mapping.findForward("success");
return forward;
}
}
|
当然,这个动作在 struts-config.xml 中用 SubmitValid 动作引用。在这个示例中,它什么也不做 —— 只是用 “success” 转发把控制传递给 Struts 控制器。这与 struts-config.xml 文件匹配并请求/pages/success.jsp JSP,如下所示:
<%@ taglib uri="/tags/struts-html" prefix="html" %> <html:html locale="true">
<head>
<title>Welcome</title>
<html:base/>
</head>
<body bgcolor="white"> <h3>Validation Successful!</h3> </body>
</html:html>
|
当然,没什么特别的内容,因为这篇教程介绍的是验证,而不是页面设计。
|