最近将公司老旧的系统(ssh2),其中struts为2.0,现在升级到struts2.3.24
项目可以启动了,但是如登录节目,提交对象数据到ACTION,但接收不到,总为NULL,但是可以接收字符串
这是为什么呢?原来struts2.0的时候是可以的。
ACTION代码:
private TSkUsersBo tSkUsersBo;
private TSkUsers tSkUsers;
private int pageNo;
private String ids;
private String conformCode;
private String newPass;
public TSkUsersBo gettSkUsersBo() {
return tSkUsersBo;
}
public void settSkUsersBo(TSkUsersBo tSkUsersBo) {
this.tSkUsersBo = tSkUsersBo;
}
public TSkUsers gettSkUsers() {
return tSkUsers;
}
public void settSkUsers(TSkUsers tSkUsers) {
this.tSkUsers = tSkUsers;
}
public int getPageNo() {
return pageNo;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
public String getIds() {
return ids;
}
public void setIds(String ids) {
this.ids = ids;
}
public String getConformCode() {
return conformCode;
}
public void setConformCode(String conformCode) {
this.conformCode = conformCode;
}
public String getNewPass() {
return newPass;
}
public void setNewPass(String newPass) {
this.newPass = newPass;
}
其中tSkUsers 总为NULL ,但验证码 conformCode 可以接收到
使用AJAX方式提交的:
var url="<%=webApp%>/sys/user!login.do";
var data={
"tSkUsers.loginName":loginName,
"tSkUsers.loginPass":$.md5(loginPass),
"conformCode":conformCode
};
$.post(url,data,function(rs){
if(rs=="1"){
top.document.location="<%=webApp%>/sys/user!toSysHome.do";
}else{
dtmlx_alert(rs);
progressOff("user_login");
}
},"text");
------解决思路----------------------
getter/setter方法不标准
public?TSkUsers?getTSkUsers()?{
????return?tSkUsers;
}
public?void?setTSkUsers(TSkUsers?tSkUsers)?{
?
????this.tSkUsers?=?tSkUsers;
}
------解决思路----------------------
由于你的s是写的,上面这个回复有问题。
变量名改为 tskUsers。具有setter/getter方法主变量,不要首字小写,第二字母大写。
------解决思路----------------------
struts-2.3.15.1版本之后对get set要求更加严格了,比如在action中申请一个全局变量为 private String aBcde; 默认生成对应的get set方法就会是 getaBcde() setaBcde() 而不是变量名称首字母大写的,这里升级后的版本要求严格
解决办法:
private TSkUsers tSkUsers; 改成private TSkUsers tskUsers
------解决思路----------------------
你没看懂我的话,是不一定是首字母大写,特殊情况下,get/set的名称不一样