struts的action里面参数什么时间必须要有get方法那

今天来说下struts里面action的参数什么时间必须要有get方法什么时间不需要get方法那。当然,set方法是必须要有的,否则我们action里面的参数就没有办法设置进去了。


1.首先看一个对象实例首先看action:

package action;

import model.User;

import org.apache.log4j.Logger;

import service.Userservice;

import com.opensymphony.xwork2.ActionContext;

/**
 * 
 * @author wb-shiminghui
 * 
 */
public class LoginAction {

	/** 摘要日志 */
	private static final Logger log = Logger.getLogger(LoginAction.class);

	private Userservice userservice;
	private User user;
	// 表单中的rand
	private String rand;

	public String Login() {
		// 从session中取出RandomAction.java 中生成的验证码random
		String arandom = (String) (ActionContext.getContext().getSession().get("random"));
		if (!rand.equals(arandom)) {
			log.info("登录失败");
			return "false";
		}

		User resUser = userservice.findUser(user);
		if (resUser == null || !resUser.getName().equals(user.getName()) || resUser.getPass() != user.getPass()) {
			log.info("登录失败");
			return "false";
		}
		log.info("登录成功");
		return "success";
	}

	public void setUserservice(Userservice userservice) {
		this.userservice = userservice;
	}

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	public void setRand(String rand) {
		this.rand = rand;
	}
}
2.再来看action里面的参数user
package model;

/**
 * 
 * @author smh
 *
 */
public class User {

	/**
	 * 主键
	 */
	private int id;

	/**
	 * 姓名
	 */
	private String name;

	/**
	 * 密码
	 */
	private int pass;

	public User() {

	}

	public User(int id, String name, int pass) {

		this.setId(id);
		this.setName(name);
		this.setPass(pass);

	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getPass() {
		return pass;
	}

	public void setPass(int pass) {
		this.pass = pass;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

}

3.大家可以看到,我在action类里面只有user对象里面写了get方法,其他两个属性userservice和rand没写get方法
 
public User getUser() {
		return user;
	}
</pre>4.下面具体说下什么情况下必须有get方法那。<pre name="code" class="java">userservice和rand都没写get方法,
    首先说userservice,这是一个接口,在我们项目启动时间容器就帮我们实例化好了他的接口实现类,并注入到我们的action中,至于如何实例化和注入,就不多说了,大家感兴趣可以研究下 java反射、jdk动态代理、cglib代理就明白了。</span>
接下来说rand,这个参数是页面带进来的,也就是会封装到request对象里面,当请求过来时间,会把参数具体的值注入到我们的action中,由于这个参数其是一个简单单属性(不是复杂属性,如user对象里面还有属性),此时请求到达action之前,会调用action的setRand方法直接注入,而不需要get。
再来说下user,当页面传递的参数是user.name 和user.paas两个参数,这两个参数会一个一个的封装到user对象,之后注入的action,并不是一次性封装两个参数,这个是个复杂点的属性。
(1)进入action之前,会先从调用action里面getUser方法,得不到或者没有getuser方法,就会帮我们代理出一个对象proxYUser,并设置名称proxYUser.setname,之后调用action的setUser设置user属性(注意:此时user只设置了一个属性name

(2)设置paas属性,同样的会调用action的getuser,得不到或者没有getuser方法, 就会帮我们代理出一个对象 proxYUser ,并设置名称 proxYUser.setpaas,之后调用action的setUser设置user属性(注意:此时user是新对象,只设置了一个属性paas,之前的name属性就是null
5.到此大家明白了吗。总之就是:简单的参数(复杂属性,如user对象里面还有属性),我们可以不带get方法,但是复杂参数,由于进入action之前是一个一个set到复杂参数,每次set都会get复杂参数,获取不到或者没有get就会帮我们代理一个,因此如果我们复杂参数没有get方法,那么最终传到action的复杂参数就会只有一个属性被赋值,并且是最后一个属性被赋值了
<span style="font-family: Arial, Helvetica, sans-serif;">大家可以参考下我写的例子!这个例子包括:ssh、jquery、aop编程进行日志管理、注解等一些东东!记得debug    LogInterceptor这个拦截器</span></span>
地址http://download.csdn.net/detail/shiminghui497565/9306103



  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值