Action中使用Json

2020-09-03 14:44:12 浏览数 (1)

1.前台页面中的ajax:

代码语言:javascript复制
//根据部门查询该部门下的用户列表
        function doSelectDept(){
            //1、获取部门
            var dept = $("#toCompDept option:selected").val();
            if(dept != ""){
                //2、根据部门查询列表
                $.ajax({
                    url:"${basePath}sys/home_getUserJson2.action",
                    data:{"dept":dept},
                    type:"post",
                    dataType:"json",//返回数据类型
                    success: function(data){
                        //2.1、将用户列表设置到被投诉人下拉框中
                        if(data != null && data != "" && data != undefined){
                            if("success" == data.msg){
                                var toCompName = $("#toCompName");
                                toCompName.empty();
                                $.each(data.userList, function(index, user){
                                    toCompName.append("<option value='"   user.name   "'>"   user.name   "</option>");
                                });
                            } else {alert("获取被投诉人列表失败!");}
                        } else {
                            alert("获取被投诉人列表失败!");
                        }
                    },
                    error:function(){alert("获取被投诉人列表失败!");}
                });
            } else {
                //清空被投诉人列表下拉框
                $("#toCompName").empty();
            }
        }

后台Action中输出json格式文本:

方法一:直接用输出流输出Json格式的文本内容。

要在项目中引入对应的包:找到struts2.x 的lib包,向本项目lib包加入“json-lib-2.3-jdk15.jar,ezmorph-1.0.6.jar,commons-beanutils-1.8.0.jar”

代码语言:javascript复制
    public void getUserJson(){
        try {
            //1、获取部门
            String dept = ServletActionContext.getRequest().getParameter("dept");
            if(StringUtils.isNotBlank(dept)){
                QueryHelper queryHelper = new QueryHelper(User.class, "u");
                queryHelper.addCondition("u.dept like ?", "%"   dept);
                //2、根据部门查询用户列表
                List<User> userList = userService.findObjects(queryHelper);
                //创建Json对象
                JSONObject jso = new JSONObject();
                jso.put("msg", "success");
                jso.accumulate("userList", userList);
                
                //3、输出用户列表以json格式字符串形式输出
                HttpServletResponse response = ServletActionContext.getResponse();
                response.setContentType("text/html");
                ServletOutputStream outputStream = response.getOutputStream();
                outputStream.write(jso.toString().getBytes("utf-8"));
                outputStream.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

方法二:使用struts2-json-plugin-2.x.jar 包,由struts将action中的变量组装成Json对象。

加入 struts2-json-plugin-2.x.jar 到项目中,在*-struts.xml中配置对应请求方法的返回类型为json。如下:

在Action中:

代码语言:javascript复制
    public String getUserJson2(){
        try {
            //1、获取部门
            String dept = ServletActionContext.getRequest().getParameter("dept");
            if(StringUtils.isNotBlank(dept)){
                QueryHelper queryHelper = new QueryHelper(User.class, "u");
                queryHelper.addCondition("u.dept like ?", "%"  dept);
                //2、根据部门查询用户列表
                return_map = new HashMap<String, Object>();
                return_map.put("msg", "success");
                return_map.put("userList", userService.findObjects(queryHelper));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return SUCCESS;
    }

配置文件中:

代码语言:javascript复制
    <package extends="json-default" namespace="/sys" name="sysHomeJson-action">
        <action name="home_getUserJson2" method="getUserJson2"
            class="cn.itcast.home.action.HomeAction">
            <result type="json">
                <param name="root">return_map</param>
            </result>
        </action>
    </package>

在返回类型中指定了root参数,意思是只返回并格式化这个类属性为json。【注意:需要利用struts返回json对象的变量,要有对应的get方法。】

0 人点赞