Json在struts2.0的Action中怎么返回到界面上去?
publicStringall(){arr=this.dao.getAllStu(c_id);for(inti=0;i<arr.size();i++){TStust...
public String all() { arr=this.dao.getAllStu(c_id); for (int i = 0; i < arr.size(); i++) { TStu stu=(TStu) arr.get(i); MyStu myStu=new MyStu(); myStu.setSId(stu.getSId()); myStu.setSName(stu.getSName()); myStu.setSSex(stu.getSSex()); myStu.setSAge(stu.getSAge()); list.add(myStu); } JSONArray son=JSONArray.fromObject(list); -------这里怎么将son传到界面上去? return null; }
展开
4个回答
展开全部
list转json:
、引入包(本文中的包全部引自struts-2.1.8.1\lib):
struts2-json-plugin-2.1.8.1.jar
json-lib-2.1.jar
commons-collections-3.2.jar
commons-beanutils-1.7.0.jar
commons-lang-2.3.jar
commons-logging-1.0.4.jar
ezmorph-1.0.3.jar
这7个包是返回json形式的数据必须的。因为json大量引用了Apache commons的包,所以要加入4个,commons包,除了commons的包外,还需要引入一个 ezmorph的包。最后加入struts2必须的6个包:
struts2-core-2.1.8.1.jar
xwork-core-2.1.6.jar
ognl-2.7.3.jar
freemarker-2.3.15.jar
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
2、后台:
1) Userinfo实体类代码 public class UserInfo implements Serializable {
private int userId;
private String userName;
private String password;
get set方法略
}
2) Action类 public class TestAction extends ActionSupport {
private String message; //使用json返回单个值
private UserInfo userInfo; //使用json返回对象
private List userInfosList; //使用josn返回List对象
get set方法略
/*返回单个值*/
public String returnMsg(){
this.message = "成功返回单个值";
return SUCCESS;
}
/*返回UserInfo对象*/
public String returnUser(){
userInfo = new UserInfo();
userInfo.setUserId(10000);
userInfo.setUserName("刘栋");
userInfo.setPassword("123456");
return SUCCESS;
}
/*返回List对象*/
public String returnList(){
userInfosList = new ArrayList<UserInfo>();
UserInfo u1 = new UserInfo();
u1.setUserId(10000);
u1.setUserName("张三");
u1.setPassword("111111");
UserInfo u2 = new UserInfo();
u2.setUserId(10001);
u2.setUserName("李四");
u2.setPassword("222222");
userInfosList.add(u1);
userInfosList.add(u2);
return SUCCESS;
}
}
3) struts.xml(必须继承json-default、json-default继承自struts-default) <package name="default" namespace="/json" extends="json-default">
<action name="returnMsg" class="com.testAction " method="returnMsg">
<result name="success" type="json">
<param name="root">validate</param>
</result>
</action>
<action name="returnUser "
class="com.testAction " method="returnUser ">
<result name="success" type="json">
<param name="includeProperties">
userInfo\.userId,userInfo\.userName,userInfo\.password
</param>
</result>
</action>
<action name="returnList" class="com.testAction "
method="returnList">
<result name="success" type="json">
<param name="includeProperties">
userInfosList\[\d+\]\.userName,userInfosList\[\d+\]\.password
</param>
</result>
</action>
</package>
3、前台:
1) 页面引入jquery-1.4.2.js
2) 代码如下: <script language="javascript">
function getMsg(){
$.ajax({
url:'json/returnMsg.action',
type:'post',
dataType:'json',
success:function(data){
$("#result").html(data.message);
}
});
}
function getUser(){
$("# result ").html("");
$.ajax({
url:'json/returnUser.action',
type:'post',
dataType:'json',
success:function(data){
$("#result").append("用户ID:"+data.userInfo.userId+"")
.append("用户名:"+data.userInfo.userName+"")
.append("密码:"+data.userInfo.password+"");
}
});
}
function getUserList(){
$("# result ").html("");
$.ajax({
url:'json/returnList.action',
type:'post',
dataType:'json',
success:function(data){
$.each(data.userInfosList,function(i,value){
$("#result").append("第"+(i+1)+"个用户")
.append("用户名:"+value.userName+"")
.append("密码:"+value.password+"");
}
}
});
}
</script>
<div id="result"></div>
<input type="button" value="获得单个消息" onclick="getMsg()"/>
<input type="button" value="获得用户信息" onclick="getUser()"/>
<input type="button" value="获得用户列表" onclick="getUserList()"/>
4、只要继承extends="json-default",result type设置成json之后,容器会把action的属性自动封装到一个json对象中(json拦截器来做),然后调用ajax的callback方法. 返回json数据
5、includeProperties 参数:输出结果中需要包含的属性值,这里正则表达式和属性名匹配,可以用“,”分割填充多个正则表达式。
如:输出UserInfo的所有属性及UserInfo的userName属性
<result type="json">
<param name="includeProperties"> userInfo.*,
userInfo \. userName </param>
</result>
6、excludeProperties 参数:输出结果需要剔除的属性值,也支持正则表达式匹配属性名,可以用“,”分割填充多个正则表达式,类同includeProperties
7、输出一个JSON List列表
<result name="success" type="json">
<param name="includeProperties">
userInfosList\[\d+\]\.userName,userInfosList\[\d+\]\.password
</param>
</result>
其中userInfosList是action中的一个List类型的属性,userInfosList \[\d+\]\. userName表示,userInfosList中存储的对象0..end的userName属性(list中存储的对象必须有userName属性)。
8、为什么要用includeProperties或excludeProperties 参数:主要是为了过滤掉接口,pojo的set、list、其它对象等不需要的数据防止循环取其它关联对象或找不到接口。如果不配置,默认是处理action中的所有属性,如果action中有接口注入,json拦截器可能找不到接口而返回不了结果,还有如果action中有一个对象,这个对象与好多对象都有关联,json拦截器会将相关联的所有对象的属性全部转换成json格式,如果其它对象有list、set,其返回结果相当庞大,有可能是死循环而无法返回 。如果不用<param name="includeProperties">或其他方式进行json数据过滤,通过debug你会发现前台返回的json字符串,是把action中的所有属性全部转化成json字符串返回给客户端(包括service接口、pojo所有属性及有关联的pojo。有时候根本返回不了结果,也不报错,后台执行了,但前台执行不到callback function,这主要是因为找不到接口或者关联的pojo太多,造成死循环),一般情况下用的最多的就是root、includeProperties 和excludeNullProperties参数。当然还有其他的方法,如给pojo的属性加json注解。
9、总结: action中避免使用get开头的action方法,去掉action中的接口的get方法 为json类型的result配置includeProperties, excludeProperties等参数.
、引入包(本文中的包全部引自struts-2.1.8.1\lib):
struts2-json-plugin-2.1.8.1.jar
json-lib-2.1.jar
commons-collections-3.2.jar
commons-beanutils-1.7.0.jar
commons-lang-2.3.jar
commons-logging-1.0.4.jar
ezmorph-1.0.3.jar
这7个包是返回json形式的数据必须的。因为json大量引用了Apache commons的包,所以要加入4个,commons包,除了commons的包外,还需要引入一个 ezmorph的包。最后加入struts2必须的6个包:
struts2-core-2.1.8.1.jar
xwork-core-2.1.6.jar
ognl-2.7.3.jar
freemarker-2.3.15.jar
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
2、后台:
1) Userinfo实体类代码 public class UserInfo implements Serializable {
private int userId;
private String userName;
private String password;
get set方法略
}
2) Action类 public class TestAction extends ActionSupport {
private String message; //使用json返回单个值
private UserInfo userInfo; //使用json返回对象
private List userInfosList; //使用josn返回List对象
get set方法略
/*返回单个值*/
public String returnMsg(){
this.message = "成功返回单个值";
return SUCCESS;
}
/*返回UserInfo对象*/
public String returnUser(){
userInfo = new UserInfo();
userInfo.setUserId(10000);
userInfo.setUserName("刘栋");
userInfo.setPassword("123456");
return SUCCESS;
}
/*返回List对象*/
public String returnList(){
userInfosList = new ArrayList<UserInfo>();
UserInfo u1 = new UserInfo();
u1.setUserId(10000);
u1.setUserName("张三");
u1.setPassword("111111");
UserInfo u2 = new UserInfo();
u2.setUserId(10001);
u2.setUserName("李四");
u2.setPassword("222222");
userInfosList.add(u1);
userInfosList.add(u2);
return SUCCESS;
}
}
3) struts.xml(必须继承json-default、json-default继承自struts-default) <package name="default" namespace="/json" extends="json-default">
<action name="returnMsg" class="com.testAction " method="returnMsg">
<result name="success" type="json">
<param name="root">validate</param>
</result>
</action>
<action name="returnUser "
class="com.testAction " method="returnUser ">
<result name="success" type="json">
<param name="includeProperties">
userInfo\.userId,userInfo\.userName,userInfo\.password
</param>
</result>
</action>
<action name="returnList" class="com.testAction "
method="returnList">
<result name="success" type="json">
<param name="includeProperties">
userInfosList\[\d+\]\.userName,userInfosList\[\d+\]\.password
</param>
</result>
</action>
</package>
3、前台:
1) 页面引入jquery-1.4.2.js
2) 代码如下: <script language="javascript">
function getMsg(){
$.ajax({
url:'json/returnMsg.action',
type:'post',
dataType:'json',
success:function(data){
$("#result").html(data.message);
}
});
}
function getUser(){
$("# result ").html("");
$.ajax({
url:'json/returnUser.action',
type:'post',
dataType:'json',
success:function(data){
$("#result").append("用户ID:"+data.userInfo.userId+"")
.append("用户名:"+data.userInfo.userName+"")
.append("密码:"+data.userInfo.password+"");
}
});
}
function getUserList(){
$("# result ").html("");
$.ajax({
url:'json/returnList.action',
type:'post',
dataType:'json',
success:function(data){
$.each(data.userInfosList,function(i,value){
$("#result").append("第"+(i+1)+"个用户")
.append("用户名:"+value.userName+"")
.append("密码:"+value.password+"");
}
}
});
}
</script>
<div id="result"></div>
<input type="button" value="获得单个消息" onclick="getMsg()"/>
<input type="button" value="获得用户信息" onclick="getUser()"/>
<input type="button" value="获得用户列表" onclick="getUserList()"/>
4、只要继承extends="json-default",result type设置成json之后,容器会把action的属性自动封装到一个json对象中(json拦截器来做),然后调用ajax的callback方法. 返回json数据
5、includeProperties 参数:输出结果中需要包含的属性值,这里正则表达式和属性名匹配,可以用“,”分割填充多个正则表达式。
如:输出UserInfo的所有属性及UserInfo的userName属性
<result type="json">
<param name="includeProperties"> userInfo.*,
userInfo \. userName </param>
</result>
6、excludeProperties 参数:输出结果需要剔除的属性值,也支持正则表达式匹配属性名,可以用“,”分割填充多个正则表达式,类同includeProperties
7、输出一个JSON List列表
<result name="success" type="json">
<param name="includeProperties">
userInfosList\[\d+\]\.userName,userInfosList\[\d+\]\.password
</param>
</result>
其中userInfosList是action中的一个List类型的属性,userInfosList \[\d+\]\. userName表示,userInfosList中存储的对象0..end的userName属性(list中存储的对象必须有userName属性)。
8、为什么要用includeProperties或excludeProperties 参数:主要是为了过滤掉接口,pojo的set、list、其它对象等不需要的数据防止循环取其它关联对象或找不到接口。如果不配置,默认是处理action中的所有属性,如果action中有接口注入,json拦截器可能找不到接口而返回不了结果,还有如果action中有一个对象,这个对象与好多对象都有关联,json拦截器会将相关联的所有对象的属性全部转换成json格式,如果其它对象有list、set,其返回结果相当庞大,有可能是死循环而无法返回 。如果不用<param name="includeProperties">或其他方式进行json数据过滤,通过debug你会发现前台返回的json字符串,是把action中的所有属性全部转化成json字符串返回给客户端(包括service接口、pojo所有属性及有关联的pojo。有时候根本返回不了结果,也不报错,后台执行了,但前台执行不到callback function,这主要是因为找不到接口或者关联的pojo太多,造成死循环),一般情况下用的最多的就是root、includeProperties 和excludeNullProperties参数。当然还有其他的方法,如给pojo的属性加json注解。
9、总结: action中避免使用get开头的action方法,去掉action中的接口的get方法 为json类型的result配置includeProperties, excludeProperties等参数.
展开全部
首先楼主要明白:后台与前台之间的传值都是通过request,session和application来进行的,其中最常用的是通过request来传值,具体你可以这样:
1.在后台把需要传到前台的值放入到request中去:request.setAttribure("son",son),//son就是你要传的值
2.在前台直接从request中去取:Object son = request.getAttribute("son") //取到你在后台放入的值
那么,你如何在后台和前台拿到request这个对象呢?
1.后台:考虑到你用的是struts2.0,有几种方式可以获取request,比如: HttpServletRequest request = ServletActionContext.getRequest();
2.前台:jsp已经内置了request对象,所以你可以直接使用
还有什么不懂可以HI我。
1.在后台把需要传到前台的值放入到request中去:request.setAttribure("son",son),//son就是你要传的值
2.在前台直接从request中去取:Object son = request.getAttribute("son") //取到你在后台放入的值
那么,你如何在后台和前台拿到request这个对象呢?
1.后台:考虑到你用的是struts2.0,有几种方式可以获取request,比如: HttpServletRequest request = ServletActionContext.getRequest();
2.前台:jsp已经内置了request对象,所以你可以直接使用
还有什么不懂可以HI我。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
HttpServletResponse response = this.getResponse();
response.setContentType("application/json;charset=utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter pw = response.getWriter();
String str = JSONArray.fromObject(list).toString();
pw.write(str);
pw.flush();
pw.close();
页面上就获取到了
方法2:
struts.xml:
<package ...... extends="json-default">
<action name="xxxxx">
<result type="json" name="success">
<param name="root">jsonMap</param>
</result>
</action>
xxx.action:
Map jsonMap;
set...get...//生成set、get方法
方法里边:
jsonMap = new HashMap<String Object>();
jsonMap.put("list",list);
页面:
回调函数:function(result){
var list = result.list;
for(var i=0;i<list.length;i++){
var name = list[i].name;//假设list[i]里边有个属性name;
}
}
response.setContentType("application/json;charset=utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter pw = response.getWriter();
String str = JSONArray.fromObject(list).toString();
pw.write(str);
pw.flush();
pw.close();
页面上就获取到了
方法2:
struts.xml:
<package ...... extends="json-default">
<action name="xxxxx">
<result type="json" name="success">
<param name="root">jsonMap</param>
</result>
</action>
xxx.action:
Map jsonMap;
set...get...//生成set、get方法
方法里边:
jsonMap = new HashMap<String Object>();
jsonMap.put("list",list);
页面:
回调函数:function(result){
var list = result.list;
for(var i=0;i<list.length;i++){
var name = list[i].name;//假设list[i]里边有个属性name;
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看的不是这个,主要是sturts.xml
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询