struts2.1.8 ,使用自带json插件struts2-json-plugin-2.1.8.1.客户端得不到json对象,弹出下载action提示框
struts2.1.8 ,使用自带struts2-json-plugin-2.1.8.1.jar把action对象返回客户端的json对象。注释配置,客户端总是弹出下载页面,打开后是正常的json数据,各位可以帮忙看看?代码很简单,困老好几天了,非常感谢,代码如下:
Java代码
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import com.test.product.bean.ScmProdUnit;
import com.opensymphony.xwork2.ActionSupport;
@Controller
@Scope("prototype")
@ParentPackage("json-default")
@Results( {
@Result(name = "success",type = "json")
})
public class JsonTestAction extends ActionSupport {
private static final long serialVersionUID = -6933656224417288484L;
private ScmProdUnit scmProdUnit;
// @Action(results={@Result(type="json",name="success",params ={"root","scmProdUnit" })})
public String querybyB() throws Exception {
System.err.println("2222222");
scmProdUnit = new ScmProdUnit();
scmProdUnit.setId(1);
scmProdUnit.setCode("jsoncode");
scmProdUnit.setName("json数据");
scmProdUnit.setRemark("测试");
return SUCCESS;
}
public ScmProdUnit getScmProdUnit() {
return scmProdUnit;
}
public void setScmProdUnit(ScmProdUnit scmProdUnit) {
this.scmProdUnit = scmProdUnit;
}
}
}
@Controller
@Scope("prototype")
@ParentPackage("json-default")
@Results( {
@Result(name = "success",type = "json")
})
public class JsonTestAction extends ActionSupport {
private static final long serialVersionUID = -6933656224417288484L;
private ScmProdUnit scmProdUnit;
// @Action(results={@Result(type="json",name="success",params ={"root","scmProdUnit" })})
public String querybyB() throws Exception {
System.err.println("2222222");
scmProdUnit = new ScmProdUnit();
scmProdUnit.setId(1);
scmProdUnit.setCode("jsoncode");
scmProdUnit.setName("json数据");
scmProdUnit.setRemark("测试");
return SUCCESS;
}
public ScmProdUnit getScmProdUnit() {
return scmProdUnit;
}
public void setScmProdUnit(ScmProdUnit scmProdUnit) {
this.scmProdUnit = scmProdUnit;
}
}
}
ProdUnit 只是一个很简单的pojo,前台代码如下
Java代码
function getjsontest()
{
$.post("json-test!querybyB.action",
{
},function(returnData,status)
{
if("success" == status)
{
alert(returnData.length); }
},"json"
);
}
function getjsontest()
{
$.post("json-test!querybyB.action",
{
},function(returnData,status)
{
if("success" == status)
{
alert(returnData.length); }
},"json"
);
}
当我在一个测试页面button里掉这个function时候,总是弹出action下载页面,下载打开后,里面的json对象数据好像没错啊,如下:
{"scmProdUnit":{"code":"jsoncode","id":1,"name":"json数据","remark":"测试"}},调用js的时候returnData总是返回null值,为啥啊?郁闷了几天了,麻烦看看
javascript:getjsontest2 应该是 javascript:getjsontest
返回格式是json 应该使用 $.getJSON(url,data,callback) 函数
json 插件使用application/json头文件,浏览器不能正常识别头文件。所以会弹出下载框。如果使用ajax请求不会出现这种问题。你可以设置json 插件contentType属性改变头文件即可application/html。