解决方法一:
Action中的业务方法前别加get 或者 set(属性的get set 除外)
解决方法二:
在调用的action和其他也被莫名其妙执行的action的头部加@JSON(serialize=false)就可以了。导入的包为:import org.apache.struts2.json.annotations.JSON;
例子:action代码
@JSON(serialize=false)
@Action(value = "/datalist", results = { @Result(name = "success", location = "/showTable.jsp") })
public String getdatainterface(){
System.out.println("------------------datalist-----------------");
List<RkrmRscZxid> list=datainterface.getAllInterfaces();
session.put("data", list);
return "success";
}
@JSON(serialize=false)
@Action(value = "/tablelist", results = { @Result(name="success",type="json") })
public String gettable(){
System.out.println("--------------tablelist----------------");
System.out.println(username);
List<RkrmRscZxid> list=datainterface.getAllInterfaces();
session.put("data", list);
List<String> list1=datainterface.gettable(username);
List<RkrmZxid> list2 = new ArrayList<RkrmZxid>();
for(int i=0;i<list1.size();i++){
RkrmZxid rkrmZxid = new RkrmZxid();
rkrmZxid.setTable_name(list1.get(i));
list2.add(rkrmZxid);
}
ActionContext tx= ActionContext.getContext();
err="0";
tx.getSession().put("err",err );//将值放在session中
session.put("tablelist", list2);
return "success";
}
ajax代码:
$("#chaxun").click(function(){
alert("chaxun");
var select = $("#zyid");
var value = select.attr("value");
alert(value);
var data = {"username":value};
var url="tablelist";
$.ajax({
url : url, //后台处理的地址
type : "POST",
data :data ,
dataType : "json",
success : function(m) {
//location.reload(true);
alert("success!!");
var err = m.err;
alert(err);
},
error : function(m){
alert("error!!1");
var err = m.err;
alert(err);
//location.reload(true);
}
});
event.stopPropagation();
});
这个例子只想执行action的gettable()方法,但是他会把此方法执行两次,还要执行一次getdatainterface();加上@JSON(serialize=false)就好了,只执行gettable()方法且执行一次