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

Struts动态ActionForm,印证框架

2012-09-20 
Struts动态ActionForm,验证框架??????? 引入动态表单DynaActionForm的目的在于减少ActionForm的数目。DynaA

Struts动态ActionForm,验证框架

??????? 引入动态表单DynaActionForm的目的在于减少ActionForm的数目。DynaActionForm和普通的ActionForm的用法基本相同。不同之处在于:普通的ActionForm类必须为每个属性提供getXxx和setXxx方法,以实现对属性的存取操作。而DynaActionForm类是将属性保存在一个HashMap类型的对象中,并同时提供相应的get(“属性名”),set(“属性名”,“属性值”)形式的存取方法。例如,要获取DynaActionForm中的name属性值,可以用下述的代码格式:
String name=(String)form.get(“name”);
??????? 需要注意的是:由于属性值最终存放在HashMap对象中,受其限制,动态AcionForm的get()方法返回值为Object类型,因此在使用时需要强制转换。由于DynaActionForm不需要重写validate()方法来实现表单验证,因此在引入动态ActionForm的同时,也引入了Validator验证框架以实现表单数据的动态验证。
??????? Struts的Validator验证框架定义了常用的十几个验证规则,如:required(验证非空)、minlength(验证最小长度)、maxlength(验证最大长度)、intRange(验证整形范围)、email(验证电子邮件地址)、date(验证日期)等,并且实现了客户端的Javascript验证和服务器端验证,以下是在myeclipse环境下使用Validator验证框架的步骤:
一、 创建基于Struts的web工程

二、 将validator-rules.xml中以下代码拷贝到资源文件中

# Struts Validator Error Messageserrors.required={0} is required.errors.minlength={0} can not be less than {1} characters.errors.maxlength={0} can not be greater than {1} characters.errors.invalid={0} is invalid.errors.byte={0} must be a byte.errors.short={0} must be a short.errors.integer={0} must be an integer.errors.long={0} must be a long.errors.float={0} must be a float.errors.double={0} must be a double.errors.date={0} is not a date.errors.range={0} is not in the range {1} through {2}.errors.creditcard={0} is an invalid credit card number.errors.email={0} is an invalid e-mail address.

?

三、 将validator-rules.xml中以下代码拷贝到struts-config.xml配置文件中,验证框架将以插件形式被注入struts框架

?

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

?

?

四、创建validation.xml文件
?五、实现客户端的javascript验证,只需在<form onSubmit=”return validateLonginActionForm(this);”>配置提交事件和使用<html:javascript formName=”loginActionForm”/>

具体示例代码如下:
Login.jsp

?

<%@ page language="java" pageEncoding="GB18030"%><%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %><%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %><%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %><%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %><html:html lang="true"><head><title>login.jsp</title></head><body><html:form action="login.do" method="post" onsubmit="return validateLoginForm(this)">用户名:<html:text property="name"></html:text><br>密 码:<html:password property="password"></html:password><br><html:submit>提交</html:submit><html:reset>重置</html:reset></html:form><html:javascript formName="loginForm"/></body></html:html>?
LoginAction.java
package com.csu.struts.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.DynaValidatorActionForm;public class LoginAction extends Action {public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {DynaValidatorActionForm loginForm = (DynaValidatorActionForm) form;// TODO Auto-generated method stubSystem.out.println("username:"+loginForm.get("name"));System.out.println("password:"+loginForm.get("password"));return null;}}?
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="uploadForm" type="com.csu.struts.form.UploadForm" />    <form-bean name="loginForm" type="org.apache.struts.validator.DynaValidatorActionForm">    <form-property name="password" type="java.lang.String" />    <form-property name="name" type="java.lang.String" />    </form-bean></form-beans><global-exceptions /><global-forwards /><action-mappings >    <action        attribute="uploadForm"        input="/upload.jsp"        name="uploadForm"        path="/upload"        scope="request"        type="com.csu.struts.action.UploadAction" />    <action        attribute="loginForm"        input="/form/login.jsp"        name="loginForm"        path="/login"        scope="request"        type="com.csu.struts.action.LoginAction" /></action-mappings><message-resources parameter="com.csu.struts.ApplicationResources" /><plug-in className="org.apache.struts.validator.ValidatorPlugIn"><set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validator.xml"/></plug-in></struts-config>
?Validator.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="loginForm"><field property="name" depends="required"><arg0 key="err.name"/></field><field property="password" depends="required,minlength"><arg0 key="err.password"/><arg1 key="${var:minlength}" resource="false"/><var><var-name>minlength</var-name><var-value>6</var-value></var></field></form></formset></form-validation>?ApplicationResources.properties
# Resources for parameter 'com.csu.struts.ApplicationResources'# Project StrutsDemoerrors.required={0} 不能为空!!errors.minlength={0} 不能少于 {1} 个字符!!err.name=用户名err.password=密码???????? 实际上你的FORM还可以继承ValidatorActionForm和DynaValidatorActionForm,这两种与他们对应的ValidatorForm和DynaValidatorForm的唯一区别是:在struts-config.xml中查找对应的FORM类时,前者根据ACTION的PATH值,而后者使用NAME值

热点排行