您当前的位置: 首页 > 

石头wang

暂无认证

  • 6浏览

    0关注

    295博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

struts1.x小笔记

石头wang 发布时间:2011-02-11 15:52:00 ,浏览量:6

 

1、  Struts1.2的.jsp中要用到Struts自己的标签,要引入才能用

一般在.jsp的前面写上

 

如果还要用其他的,也必须加上。例如想用bean的,加上

 

 

写上后才能用Struts自己的标签,如

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里面的要用POST方法(如果用就不用),用get方法会报错;第二继承DispatchAction的类不要override父类的execute方法,否则无论指定调用哪个方法都会调用execute方法,如userDis.do?method=register和userDis.do?method=login调用的都是execute方法。

 

用原始的标签,没有指定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中用接收并显示错误提示信息

7、细节:

6、  表单原来可以直接用名字就拿到,不需要document.getElementById()或者document.getElementsByName()[0]来拿。

表单定义了name就可以直接用,如:

,可以直接在JavaScript里面用myform

 

7、  首先先讲LookupDispatchAction的用法:

首先

          

          

          

          

          

          

一个表单对应这么多个按钮,这种情况用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的值

        

 

 

 

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中直接用显示。不需要像之前那样,第二个是type,是异常类的full-qualified名。第三个是path,定义异常后要forward的方向(.jsp或者.html文件)。第三种是框架验证。

 

框架验证:

使用验证框架的步骤

1)config validate plugin (struts-config.xml)

  

   

  

注:这部分是写死的,照样copy,另外validation.xml可以分成不同的小.xml

 

   

  

 

2)add validator-rule.xml and validation.xml to /WEB-INF/

  copy validator-rule.xml from struts framework

  edit validation.xml。validator-rule.xml是不需要你改动的,已经帮你写好了验证规则

 

 

     

         

             

                 

                 

                 

                 

 

                 

                 

                 

                      minlength

                      5

                 

                 

                      maxlength

                      10

                 

                 

                      mask

                      ^[a-zA-Z0-9]*$

                 

             

             

                 

                 

                 

 

                 

                 

                 

                      min

                      18

                 

                 

                      max

                      60

                   

             

             

                 

                 

             

         

     

validator.xml文件中的所有配置都放到元素中。在元素中有一个子元素,这个元素可以定义多个元素,这个元素用来定义要验证的ValidatorForm类的子类。其中name属性值就是元素中的name属性值。

    元素用来定义某个属性的约束条件,如第一个元素定义了name属性必须存在(required)、必须要满足最小长度(minlength)和最大长度(maxlength)以及还要通过mask所指的正则表达式的验证。

    元素用来定义出错信息在属性文件中的Key(所有的出错信息都在属性文件中)。元素用来向出错信息中的参数传递参数值。元素用来定义变量名和变量值。

 

 

 

3)develop ur ActionForm

(1)自定义ActionForm要继承ValidatorForm

     最好不要重写validate方法!如果重写validate方法,则必须显式调用

      return super.validate(...)方法

(2)动态form要在配置文件里使用org.apache.struts.validator.DynaValidatorForm(不要用org.apache.struts.action.DynaActionForm)

比如:

     ----不是DynaActionForm

   

   

 

继承关系图:

ActionForm(自定义的封装类)

|---DynaActionForm(配置文件里定义的封装类)

|     |---DynaValidatorForm(配置文件里定义的、带有验证功能的封装类)

|---ValidatorForm(自定义的、带验证功能的封装类)

   

 

4)

 

5)copy validation rules to ApplicationResources.properties

注意:errors.required这是对应着validator-rules.xml中的下的msg属性,不能随便改成其他的,不能改成error.require(少个s和d)。要改成自己定义的  xxx.xxx  ,当然也不一定要“.”。必须在validation.xml中定义这个name就是映射下的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.(采用客户端验证才需要这一步)

 

         ---------registerForm是在配置文件注册的封装类的名字

 

关注
打赏
1663722529
查看更多评论
立即登录/注册

微信扫码登录

0.0367s