springMVC接受json并打开新页面
背景:框架中,两个web工程A,B,我的B工程开发了一个对外action接口,A来连,要实现的功能是,A的页面发起一个action请求,到达B的springmvc,通过验证后,打开一个B工程新的tab的新窗口
方案:B用form提交json字符串。A后台用String param(不用@RequestBody取)后用vo转化为对象,返回页面参数采用redirectAttributes.addFlashAttribute隐藏传输,并用二次action转发,A的页面做window.location页面跳转
前提:
a.后端是不能新打开浏览器页面的。
b.如果后端要用@RequestBody收参数,请求type='post',dataType="json",contentType="application/json".
c.打开新页面只能由前端form提交,或者window.open来做,这两个方法是没有办法做到@RequestBody的要求。
d.发ajax主要是用于发请求获取数据,然后处理。可以用@ReqsuestBody接收,这是最普通的用途。可参考SpringMVC 之@RequestBody 接收Json数组对象
e.跨域问题可以通过A请求A的后台,由后台发起urlconnection请求,或者在B的controller里@CrossOrigin来解决。可参考SpringMVC解决跨域问题
A工程jsp
<html>
<head>
<title>My JSP 'MyJsp.jsp' starting page</title>
</head>
<body>
This is my JSP page. <br>
<button id="bt_send" style="width: 300px;" type="submit" onClick="openCROSpage()">send Reuest</button></td></tr>
</body>
<script type="text/javascript">
function openCROSpage(){
var req={
name:"mike",
password:"123456"
};
var tempForm = document.createElement("form");
tempForm.id="tempForm1";
//set the way of sending request
tempForm.method="post";
//tempForm.accept-charset="UTF-8";
//the url is used for "window.open"excute by action of form
tempForm.action="page/login/winOpen.do";
//bind the parameter for "window.open" by attributes "target",such as window attributes
tempForm.target="_blank";
//tempForm.enctype="multipart/form-data";
//set the url para by creation of hidden elements
var hideInput = document.createElement("input");
// hideInput.type="hidden";
hideInput.name= "strParam";
hideInput.value= JSON.stringify(req);
tempForm.appendChild(hideInput); //add the form into the page body
document.body.appendChild(tempForm);
//submit manually
tempForm.submit();
//remove the temp form from the page body
document.body.removeChild(tempForm);
}
</script>
</html>
B的controller
@Controller
@RequestMapping("/page/login")
public class LoginController { @RequestMapping(value = "/redirect.do")
public String doRedirect(String strParam,RedirectAttributes redirectAttributes) {
User user= new User((JSONObject) JSON.parse(strParam));
redirectAttributes.addFlashAttribute("loginInfo", user};
redirectAttributes.addFlashAttribute("userId", "ID001");
redirectAttributes.addFlashAttribute("userName", "mike");
return "redirect:../public/winOpenSucc.do";
} @RequestMapping(value = "/winOpenSucc.do")
public String redirectPage() {
return "../public/indexTest.jsp";//B的此页面可用el取,即${loginInfo.name}
}
}
B的VO
package com.vdo;
import com.alibaba.fastjson.JSONObject;
public class User {
String name;
String password;
public User(JSONObject obj){
this.name=obj.getString("name");
this.password=obj.getString("password");
}
/**
* 获取{@link #name}属性的值
*
* @return {@link #name}属性的值
*/
public String getName() {
return name;
} /**
* 设置{@link #name}属性的值
*
* @param name
* 属性值
*/
public void setName(String name) {
this.name = name;
} /**
* 获取{@link #password}属性的值
*
* @return {@link #password}属性的值
*/
public String getPassword() {
return password;
} /**
* 设置{@link #password}属性的值
*
* @param password
* 属性值
*/
public void setPassword(String password) {
this.password = password;
} }
B的indexTest
<html>
<head>
</head>
<body>
</body>
<script type="text/javascript">
//这里可以对共公变量进行初始化,然后再进行页面转发
project.userInfo.loginUser=${loginInfo.name};
project.current.operatorName=${userName};
var operatorId=${userId};
window.location="page/public/reportList.jsp?id="+operatorId;//无此步则无法实现url跳转,即url显示为action
</script >
<html>
为何要进行二次action转发和jsp window.location跳转,了解深入分析,可查看我的另一篇文章jsp取addFlashAttribute值深入理解即springMVC发redirect传隐藏参数
springMVC接受json并打开新页面的更多相关文章
- Ajax异步打开新页面弹框被拦截,无法将参数值传递到后台
一.Form提交,打开新页面被拦截 手动触发Form提交打开新页面是不会被拦截的,但是如果通过Ajax异步处理回调后再程序自动触发Form提交的话,就会被浏览器当成广告弹框拦截 1.暂时的解决办法:如 ...
- CefSharp中ChromiumWebBrowser打开新页面处理(_blank)
原文:CefSharp中ChromiumWebBrowser打开新页面处理(_blank) 版权声明:欢迎转载,但是请保留出处说明 https://blog.csdn.net/lanwilliam/a ...
- iOS如何用代码控制以不同屏幕方向打开新页面?
转载:http://blogread.cn/it/article/7765?f=wb#original 代码示例:https://github.com/johnlui/Swift-On-iOS/tre ...
- JavaScript关闭窗口的同时打开新页面的方法
做网页的时候需要弹出一个小窗口,然后要实现一个功能就是鼠标点击超链接关闭小窗口并打开一个新页面,就如同下图: 这是一个小窗口,点击超链接这个窗口会关闭并且会正常在浏览器打开新页面,首先写js关闭窗口的 ...
- js打开新页面 关闭当前页 关闭父页面
js打开新页面.关闭当前页.关闭父页面 2010-04-29 14:04:13| 分类: 页面与JavaScript | 标签: |字号大中小 订阅 //关闭当前页面,并且打开新页面,(不 ...
- DTcms手机版使用余额支付 提示信息跳转到PC版的错误。以及提交订单不打开新页面
手机版使用余额支付 提示信息跳转到PC版的错误 引起错误的原因是中间需要提交到DTcms.Web\api\payment\balance\index.aspx去处理 导致BasePage.cs中的li ...
- js 打开新页面 window.open()
利用js打开一个新页面,而不是一个新窗口. 在网上各种东西啊,蛋疼了半天,还白疼了.. 后来看到a标签有target属性,然后又发现window.open()的第二个参数是target,然后我笑了(e ...
- Web设计中打开新页面或页面跳转的方法 js跳转页面
Web设计中打开新页面或页面跳转的方法 一.asp.net c# 打开新页面或页面跳转 1. 最常用的页面跳转(原窗口被替代):Response.Redirect("newpage.aspx ...
- ASP.NET 后台打开新页面
[TOC] Response.Write 这是最常见的后台打开新页面的方法. Response.Write("<script>window.open('~/FileView.as ...
随机推荐
- Solr4.2 新特性 DocValues [转]
原文地址http://wiki.apache.org/solr/DocValues DocValues从Lucene4.2和Solr4.2开始加入,通过建立字段的正排索引,提升sorting, fac ...
- 切换了webview 定位不了的解决方法 (还没有试,记录在此)
# 切换到 webview time.sleep(2) print(driver.contexts) driver.switch_to.context('WEBVIEW_com.tencent.mm: ...
- Scrapy学习篇(六)之Selector选择器
当我们取得了网页的response之后,最关键的就是如何从繁杂的网页中把我们需要的数据提取出来,python从网页中提取数据的包很多,常用的有下面的几个: BeautifulSoup它基于HTML代码 ...
- Linux下设置固定IP的方法
本文转自http://blog.163.com/liulina_517@126/blog/static/3766198320118231431594/ linux系统安装完,以后通过命令模式配置网卡I ...
- C语言怎么简单测试为大小端模式
作者:Slience_J 原文地址:https://blog.csdn.net/slience_j/article/details/52048267 1.什么是大小端模式? 大端模式,是指数据的高字节 ...
- STM32 f407 温湿度采集报警
软件 keil5 实现 1.使用stm32f407中的DS18B20传感器采集空气温度 2.使用stm32f407中的DHT11传感器采集空气的温度和湿度 3.显示到stm32f407的LCD液晶显示 ...
- arduino mega 避障报距小车
流程图 硬件 mega2560 // Pin 13 has an LED connected on most Arduino boards. // give it a name: #include&l ...
- gulp_css2js
var gulp = require('gulp'); var rename = require('gulp-rename'); var concat = require('gulp-concat') ...
- BCGcontrolBar(八) Ribbon图标变换
点击前 点击后 CBCGPRibbonButton *pRibbonBtn=NULL; pRibbonBtn=DYNAMIC_DOWNCAST(CBCGPRibbonButton,m_pFrame-& ...
- OpenJudge 求重要逆序对数
https://blog.csdn.net/mrvector/article/details/81090165 [题解] 方法与求逆序对的个数类似,用归并排序分治求解.不同之处在于添加了一个虚拟指针p ...