action类代码 public class CategoryAction extends ActionSupport {
private List<Category> subcates;
//。省略get/set方法
public String getsubcates(){
subcates=categoryManger.getSubCates(pid);
return SUCCESS; //注意此处
}
}
action的配置: <package name="json" extends="json-default" >
<action name="getsubcatesaction" class="categoryAction" method="getsubcates">
<result name="success" type="json">
<param name="includeProperties">
subcates\[\d+\]\.id,subcates\[\d+\]\.name
</param>
</result>
</action>
</package>
jsp页面中 js代码:
function addsubcotes(pid){
alert(pid);
ajaxUtil("getsubcatesaction.action?pid="+pid,false,true,null,true,
function(data){
alert(data);
var jsonObject = eval('(' + data + ')');
var select = document.getElementById("subcate");
select.options.length=0;//清空select
alert(jsonObject.subcates);
for(var i = 0;i<jsonObject.subcates.length;i++){
var category = list.subcates[i];
slect.add(new Option(category.name,category.id));
}
}
);
}
问题:正确的情况下应该是在js中获得List<Category>,结果返回的居然是 “success"字符串,也就是action 的result的name。
不知道怎么个情况,平常这样写都没问题,今天怎么就错了呢?请大神解救。
private List<Category> subcates;
//。省略get/set方法
public String getsubcates(){
subcates=categoryManger.getSubCates(pid);
return SUCCESS; //注意此处
}
}
action的配置: <package name="json" extends="json-default" >
<action name="getsubcatesaction" class="categoryAction" method="getsubcates">
<result name="success" type="json">
<param name="includeProperties">
subcates\[\d+\]\.id,subcates\[\d+\]\.name
</param>
</result>
</action>
</package>
jsp页面中 js代码:
function addsubcotes(pid){
alert(pid);
ajaxUtil("getsubcatesaction.action?pid="+pid,false,true,null,true,
function(data){
alert(data);
var jsonObject = eval('(' + data + ')');
var select = document.getElementById("subcate");
select.options.length=0;//清空select
alert(jsonObject.subcates);
for(var i = 0;i<jsonObject.subcates.length;i++){
var category = list.subcates[i];
slect.add(new Option(category.name,category.id));
}
}
);
}
问题:正确的情况下应该是在js中获得List<Category>,结果返回的居然是 “success"字符串,也就是action 的result的name。
不知道怎么个情况,平常这样写都没问题,今天怎么就错了呢?请大神解救。
subcates\[\d+\]\.id,subcates\[\d+\]\.name
</param><param name="root">这是我一般的用法
getsubcates 返回的结果类型为List<Category>,怎么会是String类型的字符串。Struts2 + ajax + json 的原理和流程我想应该是这样,你通过前台的ajax发送一个请求到后台,也就是Action中,后台进行业务逻辑处理,处理完成后,进入action的配置中发现所配置的 result类型为json类型的,并且指定了要返回的参数。json插件处理action中指定的值,如果值为普通类型,则转为普通的字符串,如果是对象类型和素组集合等,则转换为json格式的字符串。然后将这个json格式字符串传给前台,前台ajax通过回调函数获得responseText,然后对该responseText进行 eval()方法,转为json对象。
我前后检查了一遍,就是查不出原因。在另外一个项目中,我也是这么用的,没有任何问题,结果在这个项目中就有问题了,很是奇怪。我换了一种方法,就是用JSONArray,这个功能实现是解决了。但是上面遇到的问题还没解决,如果那个高手知道了,请指教。