struts中json机制与普通页面跳转机制混用(全局结果集配置返回json)
package继承json-default与struts-default
返回结果是add的话将addResult属性转换为json返回(addResult属性有getter,setter方法),返回结果是查询是正常的页面跳转。
如果配置中不写param,默认会将所要带get,set的属性转为JSON。
<?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> <!-- <constant name="devMode" value="true"></constant> -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.action.extension" value="action" />
<constant name="struts.objectFactory" value="spring"></constant> <package name="liuyan" namespace="/" extends="struts-default,json-default">
<action name="liuyan_*" class="liuyanAction" method="{1}">
<result name="add" type="json">
<param name="root">addResult</param>
</result>
<result name="chaxun">/liuyan.jsp</result>
</action>
</package> </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"}]}
struts中json机制与普通页面跳转机制混用(全局结果集配置返回json)的更多相关文章
- struts2:JSON在struts中的应用(JSP页面中将对象转换为JSON字符串提交、JSP页面中获取后台Response返回的JSON对象)
JSON主要创建如下两种数据对象: 由JSON格式字符串创建,转换成JavaScript的Object对象: 由JSON格式字符串创建,转换成JavaScript的List或数组链表对象. 更多关于J ...
- .Net中几种常见的页面跳转传值方法
1.ASP Server对象Execute方法 ASP Server对象的Execute方法可以在执行当前页面的过程中将另一个页面执行结果的内容插入到当前页面的输出中.Execute方法带一个参数,是 ...
- 在页面跳转的时候,在跳转后的页面中使用js 获取到 页面跳转的url中携带的参数。
common.js代码 //获取URL中的参数..等等function getQueryString(name){var reg = new RegExp("(^|&)"+ ...
- idea中springboot静态资源及页面跳转问题
1,静态资源放在resources/static下,html页面放在resources/templates下 2,在html中引入静态资源时,不用带static(对于路径来说是透明的) 3, 配置ht ...
- Spring Security4.1.3实现拦截登录后向登录页面跳转方式(redirect或forward)返回被拦截界面
一.看下内部原理 简化后的认证过程分为7步: 用户访问网站,打开了一个链接(origin url). 请求发送给服务器,服务器判断用户请求了受保护的资源. 由于用户没有登录,服务器重定向到登录页面 填 ...
- Spring Security 前后端分离登录,非法请求直接返回 JSON
hello 各位小伙伴,国庆节终于过完啦,松哥也回来啦,今天开始咱们继续发干货! 关于 Spring Security,松哥之前发过多篇文章和大家聊聊这个安全框架的使用: 手把手带你入门 Spring ...
- 七:Spring Security 前后端分离登录,非法请求直接返回 JSON
Spring Security 前后端分离登录,非法请求直接返回 JSON 解决方案 在 Spring Security 中未获认证的请求默认会重定向到登录页,但是在前后端分离的登录中,这个默认行为则 ...
- php开发中的页面跳转方法总结
PHP页面跳转实现的功能就是将网站中一个网页跳转到另一个网页中.对于刚刚学习PHP语言的朋友来说,是必须要掌握的基础方法. 页面跳转可能是由于用户单击链接.按钮等触发的,也可能是系统自动产生的.页面自 ...
- html网页中 点击按钮页面跳转
在html页面中 实现点击按钮页面跳转.语句如下: <input type="button" value="跳转" onClick="windo ...
随机推荐
- 解决vs 编译的bug“请检查是否是磁盘空间不足、路径无效或权限不够”
昨晚用vs编译遇到一个问题,编译一半发现硬盘没空间,一直重启vs,重启电脑, 删除pdb文件都没用,之后尝试重新生成解决方案,就解决了.这个是vs的一个bug
- xmpp 协议详解
XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测.它在促进服务器之间的准即时操作.这个协议可能最终允许因特网用户向因特网上的其他任何人发送 ...
- NOIP2018 - 一些板子
好多东西都不熟练…… 数论 数论分块「bzoj2956: 模积和」 10.28.2018 #include<bits/stdc++.h> typedef long long ll; ; ; ...
- cephfs 挂载 卸载
#挂载 sudo ceph-fuse -m 10.1.xx.231:6789,10.1.xx.232:6789,10.1.xx.233:6789 -r /MySQL-BK /data/backup # ...
- 忘记root密码怎么办-单用户模式修改root密码
忘记root密码怎么办-单用户模式修改root密码================================= 1,开机3秒内按下向下的方向键,目的是为了不让它进入系统,而是停留在开机界面. 2 ...
- 【linux】文件默认权限:umask
在默认权限的属性上,目录与文件是不一样的.从第六章我们知道 x 权限对於目录是非常重要的! 但是一般文件的创建则不应该有运行的权限,因为一般文件通常是用在於数据的记录嘛!当然不需要运行的权限了. 因此 ...
- arm页表在linux中的融合
参考:arm-linux内存页表创建 arm的第一级页表条目数为4096个,对于4K页第二级目录条目个数为256个,一级二级条目都是每个条目4字节. 在linux下二级分页如下:虚拟地址——> ...
- WZK的减肥计划
WZK 的减肥计划(plan.cpp/ plan.in/ plan.out)问题描述:WZK 发现他的体重正迅猛的上升着,对此他感到非常焦虑,想要制定出一套完美的减肥计划. 于是 WZK 翻阅资料,查 ...
- python基础学习笔记——网络编程(协议篇)
一 互联网的本质 咱们先不说互联网是如何通信的(发送数据,文件等),先用一个经典的例子,给大家说明什么是互联网通信. 现在追溯到八九十年代,当时电话刚刚兴起,还没有手机的概念,只是有线电话,那么此时你 ...
- 《小团团团队》第九次团队作业:Beta冲刺与验收准备
项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 实验十三 团队作业9:Beta冲刺与团队项目验收 团队名称 小团团团队 作业学习目标 (1)掌握软件黑盒测试技术:(2)学 ...