struts2的XML配置、动态方法调用、获取页面表单元素的方法

要点1:struts.xml中的内容

(struts.xml是struts的配置文件)



    
    
    
    
        
        
            success.jsp        
            error.jsp
        

        
        
            success.jsp        
        

    

    

在页面上请求user.action就能对应到cn.struts2.action.UserAction这个类中的execute()方法



要点2:关于动态调用action类中的方法

(如果不动态调用,那么就是默认调用action类中的execute()方法)

方式一:

配置文件不用改,但是请求的路径要改为:action类名+!+方法名+.action
比如,UserAction中有一个login方法,那么请求路径(表单中的action值)为:user!login.action

方式二:

需要修改配置文件,假设UserAction中有一个login方法,那么节点就要加一个属性method,值等于login
....(result节点)

方式三:

使用通配符的方式,
比如:
这里的*是通配符,可以匹配任意字符,而method的值{1}就是*的内容,
比如页面请求user_login.action,那么{1}就等于login,就是说method="login",那么根据第二种方式,就会执行UserAction中的login方法
同样,通配符可以用多个,

页面上请求user_login同样可以调用login方法,但是这里method={2},通配符是匹配的字符串,
这里第一个*相当于user,第二个*相当于login,所以method="{2}"
所以,当请求的方法是第n个*的内容时,method={n}


这三种方式,推荐使用前面两种,第三种很灵活,但是比较混乱,使程序可读性变差
注意:
动态方法调用是在配置文件中配置了的, struts.enable.DynamicMethodInvocation=true,默认值是true,所以不用改就可以动态调用
如果要禁用动态方法调用,那么可以再struts.properties文件(自己建的)里面修改struts.enable.DynamicMethodInvocation=false
或者在struts.xml中配置常量(使用constant节点配置常量)

这样就可以禁用动态方法调用。



要点3:关于action类中获取页面中表单元素的值

注意,页面表单元素的name必须和后台对象属性的值相同!!!

方式一:

如果该action只使用几个表单元素的值,那么可以直接在该类中定义表单元素,然后提供get,set方法。
注意,名字须和表单元素的名字一样(通过反射机制动态调用set方法),
在调用set方法设置值后调用请求的方法

方式二:

如果值较多,那么需要通过一个vo对象来封装,在action类中定义那个vo对象(不需要实例化),然后为该vo对象提供get,set方法
这里请求进来时,会先进get方法,发现vo对象为空,(没有实例化),那就实例化一个vo对象,然后调用set方法,然后在调用get方法,
这时vo对象是已经实例化了的。然后调用请求的方法
注意,这种方式在页面的表单元素的name值需要加上该vo对象的名字的前缀
比如,action中的vo对象是private UserVo user;UserVo中有个属性是username
那么表单中


方式三:(模型驱动方式)

这里action类需要实现ModelDriven接口(com.opensymphony.xwork2.ModelDriven包中的)
然后定义一个封装对象的vo类,这里的vo对象必须实例化,否则报错(空指针)
然后实现接口中的方法
public Object getModel() {
    return 你的vo对象;
}
然后,数据会自动封装好,然后调用你请求的方法。
注意,这里和第二种方式不同,在页面表单中name属性不需要加vo对象的前缀


你可能感兴趣的:(web开发主流框架,JAVA,web,开发)