• struts中json机制与普通页面跳转机制混用(全局结果集配置返回json)


    package继承json-default与struts-default

      返回结果是add的话将addResult属性转换为json返回(addResult属性有getter,setter方法),返回结果是查询是正常的页面跳转。

      如果配置中不写param,默认会将所要带get,set的属性转为JSON。

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE struts PUBLIC
     3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
     4     "http://struts.apache.org/dtds/struts-2.3.dtd">
     5 
     6 <struts>
     7 
     8     <!-- <constant name="devMode" value="true"></constant> -->
     9     <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    10     <constant name="struts.action.extension" value="action" />
    11     <constant name="struts.objectFactory" value="spring"></constant>
    12 
    13     <package name="liuyan" namespace="/" extends="struts-default,json-default">
    14         <action name="liuyan_*" class="liuyanAction" method="{1}">
    15             <result name="add" type="json">
    16                 <param name="root">addResult</param>
    17             </result>
    18             <result name="chaxun">/liuyan.jsp</result>
    19         </action>
    20     </package>
    21 
    22 </struts>

    2.Action代码(处理增加与查询请求)

    package cn.qlq.action;
    
    import java.sql.SQLException;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.annotation.Resource;
    
    import org.springframework.context.annotation.Scope;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    import cn.qlq.bean.Liuyan;
    import cn.qlq.service.LiuyanService;
    import cn.qlq.service.impl.LiuyanServiceImpl;
    import cn.qlq.utils.PageBean;
    
    @Controller
    @Scope("prototype")
    @SuppressWarnings("all")
    public class LiuyanAction extends ActionSupport {
    
        @Resource
        private LiuyanService liuyanService;
        private String currentPage;
        private Map result;
        private String addResult;
        private Liuyan liuyan;
    
        // 增加,用ajax+json交互
        public String addLiuyan() throws SQLException {
            liuyan.setRiqi(new Date());
            boolean result = liuyanService.addLiuyan(liuyan);
            addResult = result ? "留言成功" : "添加失败";
            return "add";
        }
    
        // 查询留言
        public String getLiuyans() throws SQLException {
            result = new HashMap();
            Map condition = new HashMap<>();
            if (currentPage == null) {
                condition.put("currentPage", 1);
            } else {
                condition.put("currentPage", Integer.valueOf(currentPage));
            }
            condition.put("currentCount", 8);
            PageBean<Liuyan> pageBean = liuyanService.getPageBeanPage(condition);
            result.put("pageBean", pageBean);
            return "chaxun";
        }
    
        public LiuyanService getLiuyanService() {
            return liuyanService;
        }
    
        public void setLiuyanService(LiuyanService liuyanService) {
            this.liuyanService = liuyanService;
        }
    
        public Map getResult() {
            return result;
        }
    
        public void setResult(Map result) {
            this.result = result;
        }
    
        public String getAddResult() {
            return addResult;
        }
    
        public void setAddResult(String addResult) {
            this.addResult = addResult;
        }
    
        public Liuyan getLiuyan() {
            return liuyan;
        }
    
        public void setLiuyan(Liuyan liuyan) {
            this.liuyan = liuyan;
        }
    
        public String getCurrentPage() {
            return currentPage;
        }
    
        public void setCurrentPage(String currentPage) {
            this.currentPage = currentPage;
        }
    }

    3.JS函数(ajax提交表单)

    /**
     * 
     * Created by liqiang on 2017/10/1.
     */
    $(function() {
        /**
         * 提交按钮点击事件,内容不为空 的时候打开模态框输入姓名
         */
        $("#fabiao").click(function() {
            editor.sync();
            // 判断内容区是否为空
            if (editor.isEmpty()) {
                alert("内容不能为空!");
                return;
            }
            $("#tijiaomotai").modal();
        });
        $("#tijiao").click(function() {
            $("input[name='liuyan.name']").val($("input[name='name']").val());
            $.ajax({
                url : 'myBlog/liuyan_addLiuyan.action',
                data : {
                    'liuyan.content' : editor.html(),
                    'liuyan.name' : $("input[name='name']").val()
                },
                type : 'POST',
                async : true,
                success : function(data) {
                    alert(data);
                    window.location.href = 'liuyan_getLiuyans.action';
                },
                error : function() {
    
                }
            });
        });
    
    });

    -------------------------------------------------------配置全局结果集返回json------------------------------------------

     1.可以配置一个全局结果集,将所有回传的数据装入一个map中(对于json机制超级有用,且容易理解)

      也就是所有的访问都将map转为json返回给前台。全局结果集如果不写参数将所有的带get,set的属性转为json返回前台。

    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="exam" namespace="/" extends="json-default,struts-default">
            <!-- 全局结果集,将response转换为json传到前台 -->
            <global-results>
                <result name="success" type="json">
                    <param name="root">response</param>
                </result>
            </global-results>
    
            <!-- 生成部门树 -->
            <action name="exam_*" class="addExamAction" method="{1}"></action>
    
    
        </package>
    </struts>

    Action代码:

    package cn.xm.exam.action.exam.exam;
    
    import java.sql.SQLException;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.log4j.Logger;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Scope;
    import org.springframework.stereotype.Controller;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    import cn.xm.exam.service.employee.in.DepartmentService;
    
    /**
     * 增加考试Action
     * 
     * @author QiaoLiQiang
     * @time 2017年10月14日下午4:55:27
     */
    @Controller
    @Scope("prototype")
    @SuppressWarnings("all")
    public class AddExamAction extends ActionSupport {
        private Logger logger = Logger.getLogger(AddExamAction.class);
        @Autowired
        private DepartmentService departmentService;// 内部部门(用于生成部门树)
        private Map response;// 用于包装所有回传的ajax数据
    
        public String getDepartmentTree() {
            response = new HashMap();
            List<Map<String, Object>> departmentTrees = null;
            try {
                departmentTrees = departmentService.getDepartmentTreeForExam();
            } catch (SQLException e) {
                logger.error("查询内部部门树出错!", e);
            }
            response.put("departmentTrees", departmentTrees);
            return SUCCESS;
        }
    
        public Map getResponse() {
            return response;
        }
    
        public void setResponse(Map response) {
            this.response = response;
        }
    
    }

    JS中ajax访问:

      response与后台的response对应。可以快速的理解为js的response参数与后台的response参数等价。(也是一种好的编程习惯,便于快速理解与使用)

        $.ajax({
            url : '/Exam/exam_getDepartmentTree.action',
            async : true,
            dataType : 'json',
            success : function(response) {
                var departmentTrees = response.departmentTrees;
            },
            error : function() {
                alert("查询内部部门树失败!!!")
            }
        });

    结果:

    {"departmentTrees":[{"departmentId":"10","departmentName":"厂级-1"},{"departmentId":"10001","departmentName":"部门1_10","upDepartmentId":"10"},{"departmentId":"10001001","departmentName":"班组1_10001","upDepartmentId":"10001"},{"departmentId":"10002","departmentName":"部门2_10","upDepartmentId":"10"},{"departmentId":"10002001","departmentName":"班组2_10002","upDepartmentId":"10002"},{"departmentId":"10003","departmentName":"部门3_10","upDepartmentId":"10"},{"departmentId":"11","departmentName":"厂级-2"},{"departmentId":"11001","departmentName":"部门1_11","upDepartmentId":"11"},{"departmentId":"12","departmentName":"厂级-3"}]}
  • 相关阅读:
    知道这几 个正则表达式,能让你少写 1,000 行代码
    移除手机端a标签点击自动出现的边框和背景
    CSS 元素垂直居中的 6种方法
    当文本超出时出现省略号
    css清除select的下拉箭头样式
    设置透明边框
    js 输出语句document.write()及动态改变元素中内容innerHTML的使用
    LOCAL_EXPORT_××用法
    sprd测试系统跑vts
    C++ const用法
  • 原文地址:https://www.cnblogs.com/qlqwjy/p/7648312.html
Copyright © 2020-2023  润新知