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

引自http://longtangwan.iteye.com/blog/641695[quote]
使用领域对象来接收用户输入
er对象中包含两个字段:username和password,在Action中有一个User对象user,则在jsp中:

Jsp代码
<input type="text" name="user.username">
<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字段了。
[/quote]
今天我在接收参数实例化的时候出现如下问题:
需求:部分实例化一个领域模型的属性


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;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值