struts2表单数据如何被封装为POJO的过程

来源:百度知道 编辑:UC知道 时间:2024/06/23 22:12:23
从页面中提交User的数据到Action中 Action 写到:
public class HelloWorld extends ActionSupport {
private String name;
private User user;

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

public String getName() {
return name;
}

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

public String execute() {
name = "Hello, " + name + "!";
return SUCCESS;
}
}

但运行到Action是报一个错,错误信息如下:
2007-9-8 18:42:23 com.opensymphony.xwork2.util.InstantiatingNullHandler nullPropertyValue
严重: Could not create and/or set value back on to object
ognl.NoSuchPropertyException: tutorial.HelloWorld.user [java.lang.IllegalAccessException: Class ognl.OgnlRuntime can not access a member of class tutorial.HelloWorld with modifiers "private"]
at ognl.OgnlRuntime.setFieldValue(OgnlR

原因无他,关于为什么private User user;却不行?为什么public User user; 和 private User user = new User();可以运行通过?
请看你的程式中set方法中缺少User对象参数。
public void setUser() //括号中加上 User user
{
this.user = user;
}
private User user;却不行:
因为私有变量只供本类使用,外部是访问不到的,所以提供给我们get和set方法去访问私有变量,
public User user;:就不多说了,公共的都可以访问
private User user = new User():为何也可以访问,因为这里的user = new User()就已经实例化user对象了,而你set方法中this.user = user; 实际上就是用当前的user等于实例化的user,所以不会出现异常。

public User getUser()
{
return user;
}
public void setUser()
{
this.user = user;
}
请注意。。。。

一般我建议用软件自带的生成get set的方法

1.
public void setUser(User user) {
this.user = user;
}
2.
在jsp页面的文本输入框要是Struts2对标签,必须写成
<s:textfield name="user.userName"/>,注意name的值一定要是特定的写法。user表示class HelloWorld 中private User user的user,userName为userBean中的属性。
3.
Struts2就是根据页面标签来自动收集表单数据的。

过程没问题
问题是你怎么能从表单获得一个U