首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Structs1.2的表单证验

2012-09-01 
Structs1.2的表单验证Structs1.2的表单验证一、表单验证?对用户提交的表单进行验证,可以分为客户端验证和服

Structs1.2的表单验证

Structs1.2的表单验证

一、表单验证?

对用户提交的表单进行验证,可以分为客户端验证和服务器端验证。

Struts1.2中用Form来收集表单中的信息,因此我们对表单的验证是围绕着不同的Form来进行的

二、ActionForm

(1)我们在new Action,Form&Jsp时继承ActionForm

而对表单的验证则放在了生成的Form中的validate()方法

(2)代码编写

1.index.jsp

?

<%@ page language="java" pageEncoding="UTF-8"%><%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%> <html> <head><title>JSP for IndexForm form</title></head><body><html:form action="/index">username : <html:text property="username"/><html:errors property="username"/><br/>password : <html:password property="password"/><html:errors property="password"/><br/><html:submit/><html:cancel/><html:errors property="wrong"/></html:form></body></html>

?

2.资源文件ApplicationResource.properties

?

username=username is emptyerror.password=password is emptylabel.wrong= login failed

3.IndexForm中的validate()方法

public ActionErrors validate(ActionMapping mapping,HttpServletRequest request) {//进行数据验证/* * ActionErrors * 添加错误信息,用于页面提示 * 对应于页面中的index.jsp中的<html:errors */ActionErrors errors=new ActionErrors();//if(username.trim().length()<1){ActionMessage msg1=new ActionMessage("username");//指定资源文件ApplicationResources.properties中的key值errors.add("username", msg1);//对应<html:errors property="username"/>}if(password.trim().length()<1){ActionMessage msg1=new ActionMessage("error.password");errors.add("password", msg1);}return errors;}

?

?

4.IndexAction中的execute方法

?

public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {IndexForm indexForm = (IndexForm) form; String username=indexForm.getUsername();String password=indexForm.getPassword();LoginSer loginServ=new LoginSer();if(loginServ.validateUser(username, password)){request.getSession().setAttribute("user", username);//往session中写入user的值return mapping.findForward("success");}else{//添加错误信息ActionErrors errors=new ActionErrors();ActionMessage msg=new ActionMessage("label.wrong");errors.add("wrong",msg);this.addErrors(request, errors);return mapping.getInputForward();//取得默认的input跳转}}

?

5.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>  <data-sources />  <form-beans >    <form-bean name="indexForm" type="com.linys.struts.form.IndexForm" />  </form-beans>  <global-exceptions />  <global-forwards />  <action-mappings >    <action      attribute="indexForm"      input="/index.jsp"      name="indexForm"      path="/index"      scope="request"      type="com.linys.struts.action.IndexAction">      <forward        name="success"        path="/main.jsp"        redirect="true" />    </action>  </action-mappings>  <message-resources parameter="com.linys.struts.ApplicationResources" /></struts-config>
?

三、ValidatorForm

ValidatorForm使用到了javaScript验证,需要我们

1.在我们在new Action,Form&Jsp时继承ActionForm


Structs1.2的表单证验

2.添加一个Plugin:ValidatorPlugin


Structs1.2的表单证验

其实只是在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>

3.在WEB-INF下添加文件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><form name="userForm"><field property="userName" depends="required"> <msg name="required" key="error.user"/><arg0 key="user.required"/></field></form></formset><!--<Field>对应于一个Form Bean的一个Fieldproperty : 这个Field对应的Form Bean的Field名称,这个名称要跟struts-config.xml文件中的<form-bean>中定义的名字一致depends : 这个Field依赖于那些校验器的校验,可以使用多个校验器,各个校验器之间使用逗号隔开,验证器在validator-rules.xml中找<msg>标记说明了当这个Field通不过校验的时候向用户提供的错误信息name : 指定了对应的校验器key : 指定了定义在ApplicationResources.properties文件中的错误信息.注意:如果不指定msgStruts会使用对应校验器默认查找的错误信息,如required对应的是errors.required:我们将validator-rules.xml中的errors.required={0} is required.复制copy到ApplicationResources.properties具体对应校验器是什么以及它们对应的默认错误信息是什么都validator-rules.xml中查找<arg0>对应于我们msg中的占位符{0}其属性key name同msg--></form-validation>
?

4.需要对我们的jsp页面进行修改

?


Structs1.2的表单证验
?其中 <html:javascript 中的formName指定的是我们在struts-config.xml中注册的form名

onsubmit:调用的方法,是struts在页面生成的脚本,方法基本规则:validate+form名,当然form名中的第一个要大写


5.补充

通过实验我们可以发现虽然继承validatorForm的Form依然有validate()方法,但是我们在validate()中写的代码并不执行

?

四、DynaActionForm

也是用到了javascript脚本验证,与validatorForm不同的是DynaActionForm将Form的属性也配置到了配置文件,在包结构上就没有了Form包


struts-config.xml片段

?

<form-beans >    <form-bean name="indexForm" type="org.apache.struts.action.DynaActionForm">      <form-property name="userName" type="java.lang.String" />      <form-property name="password" type="java.lang.String" />    </form-bean>  </form-beans>
?

?

?

?

热点排行