首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

struts2中自动实例化出现的有关问题

2012-08-24 
struts2中自动实例化出现的问题引自http://longtangwan.iteye.com/blog/641695input typetext nameu

struts2中自动实例化出现的问题
引自http://longtangwan.iteye.com/blog/641695<input type="text" name="user.password"> 

<input type="text" name="user.username">
<input type="text" name="user.password"> 来进行数据绑定。

当Struts2尝试设置user对象的username属性时,将依次调用以下的方法:

Java代码
action.getUser();  
action.setUser(new User());  
action.getUser().setUserName(); 

action.getUser();
action.setUser(new User());
action.getUser().setUserName();Struts2首先尝试获得User对象的引用,当它发现User对象为null时,它将使用User类的默认构造方法创建一个User实例,并调用action的setUser()方法设置这个实例。这样,Struts2就可以设置Usser对象的username字段了。

今天我在接收参数实例化的时候出现如下问题:
需求:部分实例化一个领域模型的属性

public class site {public site() {}private int id;private String name; private int priority; private String address;private String startAddress;        //getter and setter } //action 里面部分代码:          private List<site> selectedSites;          //getter and setter//jsp里面部分代码<form action="emotion/getStatistic" method="post">选择网站:<br/><input type="checkbox" name="selectedSites[0].id" value=1>新浪<br/><input type="checkbox" name="selectedSites[1].id" value=2>126<br/><input type="checkbox" name="selectedSites[2].id" value=3>qq<br/>


现在的问题是,实例化的时候如果传入所有参数则成功,只传入id的情况下,如果不在site类里面写默认构造方法,则实例化失败,所有site对象都为null,如果写默认构造,则实例化成功
public site() {

}

正在查找原因,难道是struts2的bug?

问题解决原因已经找到,因为我在上面写了一个带参数的构造方法,所以必须提供默认构造方法
public site(int id, String name, int priority, String address,String startAddress) {this.id = id;this.name = name;this.priority = priority;this.address = address;this.startAddress = startAddress;}

引用
如果定义了一个带参数的构造方法后,就一定要定义一个
不带参数的构造方法,否则就不能创建新对象(无参数)。”
因为当构造一个类的对象时,编译器首先判断类是否有
构造函数,如果没有,则自动加上一个默认构造函数,
而一旦发现有构造函数后,则不再自动加上构造函数。
转而认为你没有用类的合法的构造函数而报出编译错误。

1 楼 it_palmer 2012-03-28   太棒了!终于找到原因了!我传多个值,但实例化的对象里只有一个。看来你的文章才知道,是因为没写getter方法。多谢多谢!

热点排行