1、 Struts1.2的.jsp中要用到Struts自己的标签,要引入才能用
一般在.jsp的前面写上
<%@ taglib prefix=”html” uri=”http://struts.apache.org/tags-html” %>
如果还要用其他的,也必须加上。例如想用bean的,加上
<%@ taglib prefix=”bean” uri=”http://struts.apache.org/tags-bean” %>
写上后才能用Struts自己的标签,如<html:errors property=”whatwhat”></html:errors>
2、 可以自己自定义一个类用于自动封装.jsp的数据,这个类要继承ActionForm,例如UserForm的字段对应.jsp中的字段,getter和setter的名字要对上.jsp中的字段命名。可以有validate方法,也可以没有。
3、 也可以不自己写封装的类,使用DynaActionForm实现自动封装。
一般要在.java里重新得到值,用先把ActionForm的入参转为DynaActionForm,然后用get(“property的名字”)重新得到Object再转为自己需要的类型,如这里的(String)xxx.get(“name1”)
4、 明显无论多少个浏览器访问,只会产生某个action类的一个action对象(要注意ActionServlet和Action这两个的区别,ActionServlet本质是一个Servlet,直接继承HttpServlet,是做总控制用的,是“总统”,而Action、DispatchAction、MappingDispatchAction、LookupDispatchAction是某一个action,是“总统的秘书”,一个总统可以有n个秘书)。也就是说,每种秘书只有一位。
5、 使用DispatchAction的时候要注意两点,第一,.jsp里面的<form>要用POST方法(如果用<html:form>就不用),用get方法会报错;第二继承DispatchAction的类不要override父类的execute方法,否则无论指定调用哪个方法都会调用execute方法,如userDis.do?method=register和userDis.do?method=login调用的都是execute方法。
用原始的<form>标签,没有指定method=”post”的话报错:
javax.servlet.ServletException: Request[/userDis] does not contain handler parameter named ‘method’. This may be caused by whitespace in the label text.
验证:普通的验证,在ActionForm里面override validate方法,validate方法返回ActionErrors,会涉及到这么几个关系ActionErrors是ActionMessages的子类,ActionMessage可以“挂”到ActionMessages上。一般这么写:
ActionErrors errors = new ActionErrors();
if(name==null && name.equals(“”)){
//ActionMessage am = new ActionMessage(“直接写要返回的信息,自动红色”);
ActionMessage am = new ActionMessage(“empty.name”);//一般在ApplicationResource.properties文件里这么写上返回的信息,比较灵活
errors.add(“invalidname”,am);
}
if(password ==null && password.equals(“”)){
//ActionMessage am = new ActionMessage(“直接写要返回的信息,自动红色”);
ActionMessage am = new ActionMessage(“empty.password”);//一般在ApplicationResources.properties文件里这么写上返回的信息,比较灵活
errors.add(“invalidpass”,am);
}
return errors;
在ApplicationResources.properties里写上
empty.name=name cannot be empty….
empty. password = password cannot be empty….
.jsp中用<html:errors property=”invalidname”></html:errors>接收并显示错误提示信息
7、细节:
6、 表单原来可以直接用名字就拿到,不需要document.getElementById()或者document.getElementsByName()[0]来拿。
表单定义了name就可以直接用,如:
<form name=”myform”>,可以直接在JavaScript里面用myform
7、 首先先讲LookupDispatchAction的用法:
首先
<form action=”lookupDis” method=”post”>
<input type=”submit” value=”增加” name=”abc” >
<input type=”submit” value=”删除” name=”abc” >
<input type=”submit” value=”修改” name=”abc” >
<input type=”submit” value=”查询” name=”abc” >
<input type=”submit” value=”注册” name=”abc” >
<input type=”submit” value=”登录” name=”abc” >
</form>
一个表单对应这么多个按钮,这种情况用LookupDispatchAction比较好
在继承LookupDispatchAction的类必须实现getKeyMethodMap方法,此方法返回Map类型。可以HashMap map = new HashMap();然后map.put(“这个就是按钮的value值”,对应的方法名);最后return map;当然为了写灵活,“这个就是按钮的value值”改写在ApplicationResources文件里,如
map.put(“lookup.add”,addMethod);
map.put(“lookup.del”,delMethod);
map.put(“lookup.update”,updateMethod);
map.put(“lookup.find”,findMethod);
map.put(“lookup.regi”,regiMethod);
map.put(“lookup.login”,loginMethod);
在ApplicationResources文件里有:
右边的要对应value中的值,注意资源文件里面不能用汉字,要用【/u十六进制】形式
lookup.add=增加
lookup. del =删除
lookup. update =修改
lookup. find =查询
lookup. regi =注册
lookup. login =登录
注意parameter的值要对应按钮的name的值
<action path=”/ lookupDis”
type=”day1.com.action.LookupDisAction” parameter=”abc”></action>
8、 struts的验证,验证分为三种,第一种就是在继承ActionForm的类的validate方法里面写验证逻辑,struts-config.xml中的action标签的validate属性默认是true,所以写不写上validate=”true”都会经过此种验证。第二种是在继承Action(或者DispatchAction之类)的类的execute方法或者其他方法里面写验证逻辑,依然是用ActionErrors ae = new ActionErrors();ActionMessage am = new ActionMessage(“what.in.the.peizhi”);
ae.add(“jubing”,am);但是这时不是return ae;因为人家方法是返回ActionForward的而不是ActionErrors。用this.saveErrors(request,am);this是指集成Action(或者DispatchAction)的类的对象。第三种不是编程式异常处理而是声明式异常处理,在action标签里声明exception子标签,注意要在forward标签之前。exception有三个属性,一是key,映射资源文件,可以在.jsp中直接用<html:errors />显示。不需要像之前那样<html:errors property=”” />,第二个是type,是异常类的full-qualified名。第三个是path,定义异常后要forward的方向(.jsp或者.html文件)。第三种是框架验证。
框架验证:
使用验证框架的步骤
1)config validate plugin (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>
注:这部分是写死的,照样copy,另外validation.xml可以分成不同的小.xml
<plug-in className=”org.apache.struts.validator.ValidatorPlugIn”>
<set-property property=”pathnames” value=”/WEB-INF/validator-rules.xml,/WEB-INF/validation1.xml,,/WEB-INF/validation2.xml” />
</plug-in>
2)add validator-rule.xml and validation.xml to /WEB-INF/
copy validator-rule.xml from struts framework
edit validation.xml。validator-rule.xml是不需要你改动的,已经帮你写好了验证规则
<?xml version=”1.0″ encoding=”GBK” ?>
<!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=”firstValidatorForm”>
<field property=”name” depends=”required,maxlength,minlength,mask”>
<msg name=”required” key=”error.name.blank” />
<msg name=”minlength” key=”error.name.minLength” />
<msg name=”maxlength” key=”error.name.maxLength” />
<msg name=”mask” key=”error.name.alphanum” />
<arg name=”minlength” key=”${var:minlength}” position=”0″ resource=”false” />
<arg name=”maxlength” key=”${var:maxlength}” position=”0″ resource=”false” />
<var>
<var-name>minlength</var-name>
<var-value>5</var-value>
</var>
<var>
<var-name>maxlength</var-name>
<var-value>10</var-value>
</var>
<var>
<var-name>mask</var-name>
<var-value>^[a-zA-Z0-9]*$</var-value>
</var>
</field>
<field property=”age” depends=”required,integer,intRange”>
<msg name=”required” key=”error.age.blank” />
<msg name=”integer” key=”error.age.integer” />
<msg name=”intRange” key=”error.age.intRange” />
<arg name=”intRange” key=”${var:min}” position=”0″ resource=”false” />
<arg name=”intRange” key=”${var:max}” position=”1″ resource=”false” />
<var>
<var-name>min</var-name>
<var-value>18</var-value>
</var>
<var>
<var-name>max</var-name>
<var-value>60</var-value>
</var>
</field>
<field property=”email” depends=”required,email”>
<msg name=”required” key=”error.email.blank” />
<msg name=”email” key=”error.email.invalid” />
</field>
</form>
</formset>
</form-validation>
validator.xml文件中的所有配置都放到<form-validation>元素中。在<form-validation>元素中有一个<formset>子元素,这个元素可以定义多个<Form>元素,这个元素用来定义要验证的ValidatorForm类的子类。其中name属性值就是<form-bean>元素中的name属性值。
<field>元素用来定义某个属性的约束条件,如第一个<field>元素定义了name属性必须存在(required)、必须要满足最小长度(minlength)和最大长度(maxlength)以及还要通过mask所指的正则表达式的验证。
<msg>元素用来定义出错信息在属性文件中的Key(所有的出错信息都在属性文件中)。<arg>元素用来向出错信息中的参数传递参数值。<var>元素用来定义变量名和变量值。
3)develop ur ActionForm
(1)自定义ActionForm要继承ValidatorForm
最好不要重写validate方法!如果重写validate方法,则必须显式调用
return super.validate(…)方法
(2)动态form要在配置文件里使用org.apache.struts.validator.DynaValidatorForm(不要用org.apache.struts.action.DynaActionForm)
比如:
<form-bean name=”” type=”org.apache.struts.validator.DynaValidatorForm”> —-不是DynaActionForm
<form-property name=”name” type=”java.lang.String”></form-propertty>
<form-property name=”pasword” type=”java.lang.String”></form-propertty>
</form-bean>
继承关系图:
ActionForm(自定义的封装类)
|—DynaActionForm(配置文件里定义的封装类)
| |—DynaValidatorForm(配置文件里定义的、带有验证功能的封装类)
|—ValidatorForm(自定义的、带验证功能的封装类)
4)<action ….. validate=”true”>
5)copy validation rules to ApplicationResources.properties
注意:errors.required这是对应着validator-rules.xml中的<validator>下的msg属性,不能随便改成其他的,不能改成error.require(少个s和d)。要改成自己定义的 xxx.xxx ,当然也不一定要“.”。必须在validation.xml中定义<msg name=”required” key=”xxx.xxx” />这个name就是映射<validator>下的msg属性,key就是自己爱定义什么就定义什么
errors.required={0} is required.
errors.invalid={0} is invalid.
errors.integer={0} must be an integer.
errors.date={0} is not a date.
errors.email={0} is an invalid e-mail address.
注意:form.xxxx这个是用在:用form.xxxx这把“key”(键)取出等号右边的“value”(值),然后填充(塞)到上面的{0}啊之类的地方。当然可以用what.xxxx
form.username=User Name
form.password=Password
form.sex=Sex
form.age=Age
form.hometown=Hometown
form.email=Email
form.birthday=Birthday
6)active javaScript in Jsp page.(采用客户端验证才需要这一步)
<html:form action=”/register” method=”post”
οnsubmit=”return validateRegisterForm(this)”>
<html:javascript formName=”registerForm”/> ———registerForm是在配置文件注册的封装类的名字
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/135351.html