当前位置: 代码迷 >> Java Web开发 >> struts2.3.24 交付对象 ACTION 总为NULL
  详细解决方案

struts2.3.24 交付对象 ACTION 总为NULL

热度:949   发布时间:2016-04-13 22:33:25.0
struts2.3.24 提交对象 ACTION 总为NULL
最近将公司老旧的系统(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;
}
------解决思路----------------------
引用:
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
------解决思路----------------------
引用:
Quote: 引用:

struts-2.3.15.1版本之后对get set要求更加严格了,比如在action中申请一个全局变量为 private String aBcde; 默认生成对应的get set方法就会是 getaBcde() setaBcde()  而不是变量名称首字母大写的,这里升级后的版本要求严格


根据你的方法,真的可以接收到信息了。
struts-2.3.15.1以后,必须要要求 get set的 首字母大写了?
但是 spring 注入的对象,如
这里的get set 的首字母也没有大写,但是都成功注入了,是否只有从浏览器提交的信息,才必须要求大写?


你没看懂我的话,是不一定是首字母大写,特殊情况下,get/set的名称不一样
  相关解决方案