Java Web知识Java Webjava web 学习

action中怎么获取请求参数值,并返回json格式的数据

2017-11-12  本文已影响38人  想酷却酷不起来

配置struts.xml文件(struts2)

<package name="api"  extends="json-default">
<action name="account" class="com.api.accountAction">
    <result type="json">
        <param name="root">ajaxResult</param> 
    </result>
</action>
</package>
  1. package extends属性写“json-default”,但是要先把struts2开发包中的struts2-json-plugin-2.2.3这个jar包导进自己的工程
  2. 添加action,name即action的名字,class为对应的java类
  3. result标签 type属性设为"json"
  4. <param></param>之间的值就是ajaxResult就是最终返回的数据,即在action中,要返回的json数据都要设置给ajaxresult.

编写action

image.png
action中定义一个名字为 ajaxResult的JSONObject,和前面struts.xml配置文件中<param></param>中的ajaxResult对应

获取请求参数

1.通过Servlet API来获取(这种方法有很多,我只提到一个).
这种方法你可以理解成通过request.getParameter("key")来获取
但是在action中,不能够直接获取request对象,必须通过ActionContext这个类,看代码

ActionContext ctx=ActionContext.getContext();
Map<String,Object> parameters=ctx.getParameters(); 

其中getParameters()这个方法会返回一个包含所有HttpServletRequest参数信息的Map对象,不过要注意你通过这个map.get("key")得到的是一个String object.此外ActionContext还有很多其他方法,如获得session,application等,需要的自行查阅文档。
2.通过实现ModelDriven接口获取
当我们提交的数据比较少时,我们可以通过servlet API一个个获取,但是当数据比较多的时候,这种方法就不是很好了,这时候我们可以用struts2给我们提供的ModelDriven接口来实现。
假如我传递的参数有俩个一个是page,一个是limit,用于实现返回分页的数据
第一步:定义一个PageModel
设定俩个private属性,page,limit.并分别实现setter和getter方法,代码比较简单,就不贴了。
第二步:实现ModelDriven接口
让我们的action implements ModelDriven<PageModel>,既然实现了人家的接口,那么就要按要求实现人家的方法。

private PageModel pageModel=new PageModel(); //要先实例化
public PageModel getModel(){
    return this.pageModel;
}

第三步:接收参数
通过上面简单的俩步,就实现了自动接收参数,即当请求交给这个action处理的时候,所带的page和limit参数就会自动赋值给这个PageModel.需要用的时候,只需要从PageModel中get就可以了。

返回json数据

首先要知道,有俩种做法,一种返回的是json字符串,前端拿到后需要解析字符串,还有一种做法是直接返回json对象,我采用的是第二种。
然后我用了阿里的fastjson这个json库,真的非常好用,速度也很快,推荐给大家。前面的ajaxResult是一个JSONObject,所以我们只需要给这个对象里put就可以。
先引入com.alibaba.fastjson.JSONObject;

import com.alibaba.fastjson.JSONObject;
public String queryAccount() {
    int page=Integer.parseInt(pageModel.getPage());
    int limit=Integer.parseInt(pageModel.getLimit());
    try {           
        res=DAOFactory.getIAccountDAOInstance().findSome((page-1)*limit, page*limit);
        int totalCount=DAOFactory.getIAccountDAOInstance().getCount();      
        ajaxResult.put("code", 0);
        ajaxResult.put("msg", "");
        ajaxResult.put("count", totalCount);
        ajaxResult.put("data", res);
        return SUCCESS
    } catch (Exception e) {
        System.out.println(e);
        return SUCCESS;
    }
}

然后访问account!queryAccount?page=1&limit=15,前台拿到的数据如下图


image.png
上一篇下一篇

猜你喜欢

热点阅读