<action
name="cfg_*"
method="{1}"
class="action.CFGAction">
<result
name="cfg_edit"
type="json">
<param
name="includeProperties">
cfg.*
</param>
</result>
</action>
其中cfg_*表示jsp中调用action方法的开头,如:form的时候cfg_search.action.表示提交的时候去执行action层的search方法。
class="action.CFGAction"当然表示action这个类了。
cfg_edit表示action当前方法return的一个字符串。
type="json"表示把返回类型封装成一个json。
cfg.*表示action实例化出来的一个叫cfg的对象。
这样json字符串会自动帮你把你的bean对象封装好。然后直接取数据就可以了。
首先Action中不要使用List接收参数,改成数组
private JBean[] jbs --- 这里的对象名是jbs
因为List接收前台,需要带索引,这个比较麻烦
前台的数据格式:
{ jbs : [
{name : "张三", age : 22, sex : 1},
{name : "李四", age : 32, sex : 0},
{name : "王五", age : 24, sex : 1}
]}
注:jbs 对应Action中的对象名,
他也是个数组,里面有3个json对象,属性对应JBean对象属性
所以你现在需要的是组装自己的数据
var param = {jbs : []}
for(var i=1i<=4i++) {
var bean = {}
bean["name"] = $("#name" + i).val()
bean["age"] = $("#age" + i).val()
bean["sex"] = $("#sex" + i).val()
param.jbs[i] = bean
}
JSP页面接收不到ACTION返回的JSON数据是因为在struts的配置文件中返回数据类型指定错误导致,正确的方法是指定application/json返回。1、在action的配置中写法如下:
<action name="write" class="json.JsonAction" method="write" />
2、在具体要返回的方法中写法如下:
public void write() throws IOException{
HttpServletResponse response=ServletActionContext.getResponse()
/*
* 在调用getWriter之前未设置编码(既调用setContentType或者setCharacterEncoding方法设置编码),
* HttpServletResponse则会返回一个用默认的编码(既ISO-8859-1)编码的PrintWriter实例。这样就会
* 造成中文乱码。而且设置编码时必须在调用getWriter之前设置,不然是无效的。
* */
response.setContentType("application/jsoncharset=utf-8")
//response.setCharacterEncoding("UTF-8")
PrintWriter out = response.getWriter()
//JSON在传递过程中是普通字符串形式传递的,这里简单拼接一个做测试
String jsonString="{\"user\":{\"id\":\"123\",\"name\":\"张三\",\"say\":\"Hello , i am a action to print a json!\",\"password\":\"JSON\"},\"success\":true}"
out.println(jsonString)
out.flush()
out.close()
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)