调一次ajax执行两次action或是还有执行其他的action

解决方法一:

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 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 list=datainterface.getAllInterfaces();
session.put("data", list);
List list1=datainterface.gettable(username);
List list2 = new ArrayList();
for(int i=0;iRkrmZxid 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()方法且执行一次

你可能感兴趣的:(ajax,ajax,SSH框架)