Struts中的前台验证

主要是关于Struts1.x中的<html:javascript>的使用,请看demo

首先是web.xml文件

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>3</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>3</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>enter.jsp</welcome-file> </welcome-file-list> </web-app>

然后是使用了<html:javascript>标签对表单进行验证的前台页面enter.jsp

<%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%> <!-- focus一般称为聚焦或定位,需要给它一个action的名字。onsubmit中的this指定验证的是当前表单 --> <html:form action="/enter" focus="enter" οnsubmit="return validateEnterForm(this)"> uname : <html:text property="uname"/><br/> email : <html:text property="email"/><br/> <html:submit/><html:cancel/> </html:form> <!-- 生成动态JavaScript脚本。在formName中指定具体的FormBean名字 --> <html:javascript formName="enterForm"/> <!-- =================================================================================================== 【JavaScript】 Struts的前台验证,使用方式,如下: 第一步:通过focus定位Action 第二步:生成动态JavaScript脚本 第三步:当表单提交的时候,通过οnsubmit=""指定所调用的函数,即第二步生成的函数 =================================================================================================== 如果我们不知道第三步应该调用哪个函数的话,应该怎么办呢 我们可以在写完第二步的时候,发布项目,然后调用enter.jsp页面,接着再右键查看该页面的源文件 此时会发现enter.jsp打开得比较慢。在其源文件中自动生成了一段JavaScript脚本,此即第二步执行后的效果 然后在JavaScript脚本中出现一个验证函数,名为validateEnterForm。该函数就是写在onsubmit中的函数 =================================================================================================== 如果使用的ActionForm属于ValidatorForm子类,那么此时的验证是完全通过服务器进行验证的 若想在前台进行验证,即在前台自动产生脚本,就需要与前台页面配合的Form是一个动态的带验证的 所以此时用到的ActionForm需要是一个DynaValidatorForm类,并且它不是以JavaBean形式显现出来的 即此时的DynaValidatorForm是不存在的,它是程序运行时动态产生的,并被描述在了struts-config.xml中 =================================================================================================== 【补充】 经个人测试:如果此时没有在validation.xml中对该页面表单字段进行验证配置 经个人测试:那么应用运行时,会报告如下错误 经个人测试:javax.servlet.jsp.JspException: No form found under 'enterForm' in locale 'zh_CN' 我的理解为:Struts可以动态的创建对应于前台表单的JavaScript脚本,该脚本用来验证前台表单字段的合法性 我的理解为:而我们只需要在validation.xml中为该表单字段提供某些描述数据,然后就可以直接进行验证了 我的理解为:但请注意,若想让前台自动产生脚本,那么与前台页面对应的Form就需要是一个DynaValidatorForm =================================================================================================== 【欢迎来拍砖】 如果这里关于Struts1.x的前台验证,说的有不对的地方,欢迎广大网友,不吝指正,谢谢!! =================================================================================================== -->

然后是验证成功后的enterSuccess.jsp页面

<%@ page pageEncoding="UTF-8"%> <%@ page import="org.apache.struts.validator.DynaValidatorForm"%> <% DynaValidatorForm vff = (DynaValidatorForm)session.getAttribute("enterForm"); %> <font color="blue"><%=vff.get("uname")%></font>,登录成功

然后是Struts1.x的核心配置文件struts-config.xml

<?xml version="1.0" encoding="UTF-8"?> <!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> <form-beans> <form-bean name="enterForm" type="org.apache.struts.validator.DynaValidatorForm"> <!-- 指定该动态的可验证的Form中的两个属性 --> <form-property name="email" type="java.lang.String" /> <form-property name="uname" type="java.lang.String" /> <!-- 这样的Form有一个优点:它不是当程序运行的时候,即时产生出来一个对象注入到内存里的 --> <!-- 而是当我们用到的时候,它才动态的产生。所以它的开销会小一点。但运行的速度会慢一点 --> </form-bean> </form-beans> <action-mappings> <action path="/enter" attribute="enterForm" name="enterForm" input="/enter.jsp" type="com.jadyer.action.EnterAction"> <forward name="enterSuccess" path="/enterSuccess.jsp" redirect="true" /> </action> </action-mappings> <message-resources parameter="com.jadyer.util.ApplicationResources" /> <!-- 此时需要将validator-rules.xml和validation.xml文件在WebRoot//WEB-INF//目录下 --> <!-- 其中validator.xml是我们自己编写的,而validator-rules.xml是由Struts1.x提供的 --> <!-- 在Struts1.2中,validator-rules.xml位于//WebRoot//WEB-INF根目录中 --> <!-- 在Struts1.3中,validator-rules.xml位于struts-core-1.3.8.jar中的org.apache.struts.validator包中 --> <!-- 然后将validator-rules.xml另存为validation.xml,并将该文件第12行<plug-in>拷贝到struts-config.xml中 --> <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml, /WEB-INF/validation.xml"/> </plug-in> </struts-config>

接着是我们自定义的validation.xml文件

<!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> <!-- 注意:这里需要提供对enterForm的验证,否则enter.jsp中指定的<html:javascript>验证,仍然无效 --> <form name="enterForm"> <field property="uname" depends="required,mask"> <arg0 key="输入的用户名" resource="false"/> <var> <var-name>mask</var-name> <var-value>[A-Za-z]</var-value> </var> </field> <field property="email" depends="required,email"> <arg0 key="lab.email"/> </field> </form> </formset> </form-validation>

然后是用到的Action处理类

package com.jadyer.action; 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.validator.DynaValidatorForm; public class EnterAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { DynaValidatorForm EnterForm = (DynaValidatorForm) form; //获取并输出DynaValidatorForm中的值 //这里uname对应的是enter.jsp中的<html:text property="uname"/> System.out.println("uname:" + EnterForm.get("uname")); System.out.println("email:" + EnterForm.get("email")); return mapping.findForward("enterSuccess"); } }

最后是用到的国际化资源文件ApplicationResources.properties

lab.name = Name lab.email = Email errors.required = {0} is required errors.invalid = {0} is invalid errors.email = {0} is an invalid e-mail address #下面的是ApplicationResources_zh_CN.properties文件的内容 lab.name = /u59D3/u540D lab.email = /u7535/u5B50/u90AE/u4EF6 errors.required = {0} /u4E0D/u80FD/u4E3A/u7A7A errors.invalid = {0} /u8F93/u5165/u7684/u5185/u5BB9/u4E0D/u5408/u7406 errors.email = {0} /u4E0D/u662F/u5408/u6CD5/u7684Email/u5730/u5740

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值