最新消息:关注【太平洋学习网】微信公众号,可以获取全套资料,【全套Java基础27天】【JavaEE就业视频4个月】【Android就业视频4个月】

struts2如何向前台返回json数据(两种方法)

Javaweb admin 浏览 评论

struts2框架返回json数据到网页前台,虽然没有springmvc框架那么方便,但是有时候公司必须要求我们使用struts2框架来向前台返回json数据,甚至会要求我们用struts2框架开发接口来为手机客户端提供json数据,这个时候我们就应该了解一下这个功能该如何做了。

struts返回json数据给手机客户端或前台有两种方式。

第一种获取json的方式:

这个是struts2框架的action类里面的处理方法

 //这个是接收json字符串的
 private String json;
 //这个是返回列表的方法
 public void listUI(){
  try {
   //queryAll()方法里面我已经用gson对象将list列表转化成了json格式 
   json = this.studentService.queryAll(); 
   HttpServletResponse response = ServletActionContext.getResponse();
   response.setContentType("text/json;charset=utf-8");
   PrintWriter out = response.getWriter();
   out.println(json);
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

我们以响应头的方式将获取到的数据以json的形式返回到前台,利用PrintWriter对象的println方法输出json数据,但是这样是不够的,因为我们前台是用ajax请求来获取数据的,前台代码如下:

  <body>
    <center><button onclick="getList();">获取学生列表</button></center></br>
     <table border="1px" width="600px" align="center">
      <tr>
       <th>ID</th>
       <th>姓名</th>
       <th>性别</th>
       <th>生日</th>
       <th>课程</th>
       <th>地址</th>
      </tr>
      <tbody id="tbody">      
      </tbody>
     </table>     
  </body>

ajax请求代码如下

    <script type="text/javascript">
     function getList(){
      $.ajax({
       type:"get",       
       url:"student_listUI.action",
       dataType:"json",
       async:"true",
       success:function(data){
        var objList = eval(data);
        var tbody = $("#tbody");
        $(objList).each(function(index){
         var obj = objList[index];
         var tr = $("<tr></tr>");
    
         /*tr.append('<td>'+obj.id+'</td>'+'<td>'+obj.name+'</td>'+'<td>'+obj.sex+'</td>');
           tr.append('<td>'+obj.birth+'</td>'+'<td>'+obj.department+'</td>'+'<td>'+obj.address+'</td>');*/
    
         tr.append("<td>"+obj.id+"</td><td>"+obj.name+"</td><td>"+obj.sex+"</td>");
         tr.append("<td>"+obj.birth+"</td><td>"+obj.department+"</td><td>"+obj.address+"</td>");
         tbody.append(tr);
        });       
       },
       error:function(){
        alert("获取失败");
       }      
      });
     }
    </script>

这里用到了url:"student_listUI.action",的请求方式,根据ssh的框架原理,我们是需要视图映射器的,struts视图映射器代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>  
 <package name="studentAction" namespace="/" extends="json-default"> 
  <action name="student_*" class="com.taotao.action.StudentAction" method="{1}">  
  </action>
 </package>
</struts>

“extends=”这个地方在第一种方式下没什么影响,不管是json-default还是struts-default都是可以的。我们需要这个视图映射器才能进入到前面的listUI方法获取我们需要的json数据,然后json数据才会被我们前台的ajax方法获取到。

第二种方式,比第一种方式稍微复杂一点,下面我们来看看:

action类的方法稍微有一点不一样,这里一定要注意。

 //注意,这里的json属性必须要有getter与setter方法,不然前台是无法获取到的
 private String json;
  public String getJson() {
  return json;
 }
 public void setJson(String json) {
  this.json = json;
 }
 public String listUI(){
  json = this.studentService.queryAll();  
  return SUCCESS;
 }

前台页面是一样的,这里就不在贴出来了,请翻到上面熟悉一下前台代码。

这里的ajax我们依然调用了url:"student_listUI.action",这个action的方法,所以我们仍然需要在struts.xml映射文件中配置相关的映射代码,这个时候一定要注意,已经和第一种方法不一样了。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
 <package name="studentAction" namespace="/" extends="json-default"> 
  <action name="student_*" class="com.taotao.action.StudentAction" method="{1}">
   <result name="fail">/WEB-INF/jsp/error.jsp</result>
   <result name="success" type="json">
    <param name="root">json</param>
   </result>   
  </action>
 </package>
</struts>

我们看到了吗?前面我为什么要json属性的getter与setter方法?就是因为我们要在这里用上它。

   <result name="success" type="json">
    <param name="root">json</param>
   </result>

当然了,param里面的json和type=”json“没有任何联系,请别弄混了,param里面的json是随便起的名字,但是必须要和action里面的json属性名一样,还有一点要注意的是,extends=”“这里面必须只能用json-default,而且我们需要导入一个jar包,jar包名称如下:

struts2-json-plugin-2.2.3.jar

这两种方法在前台展示的json数据是一样的,效果如下:

如果我贴的代码有哪些有问题的,欢迎你在下方的回复栏中提出来。

来源网站:太平洋学习网,转载请注明出处:http://www.tpyyes.com/a/javaweb/13.html
"文章很值,打赏犒劳作者一下"
微信号: Javaweb_engineer

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

与本文相关的文章

发表我的评论
取消评论

表情

您的回复是我们的动力!

  • 昵称 (必填)

网友最新评论