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 ...
随机推荐
- Selenium+Python:下载文件(Firefox 和 Chrome)
引自 https://blog.csdn.net/Momorrine/article/details/79794146 1. 环境 操作系统 Win10 IDE Eclipse (Oxyg ...
- django报错总结
问题一: dictionary update sequence element #1 has length 3; 2 is required 解决方法: 检查视图函数的render里传的字典
- 使用Selenium模拟浏览器抓取淘宝商品美食信息
代码: import re from selenium import webdriver from selenium.webdriver.common.by import By from seleni ...
- 【ZZ】谈谈持续集成,持续交付,持续部署之间的区别
谈谈持续集成,持续交付,持续部署之间的区别 http://blog.flow.ci/cicd_difference/ 谈谈持续集成,持续交付,持续部署之间的区别 2016年08月03日 标签:beta ...
- Flume原理解析【转】
一.Flume简介 flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用.Flume 初始的发行版本目前被统称为 Flume OG(original generati ...
- Toast--报错
Toast的makeText()方法报错帖上一代码,用Toast来简单处理回调机制.但是Toast的makeText()方法老报错:import android.content.Context;imp ...
- MySQL 迁移并搭建主从(实践)
第一阶段 一.数据的初始化 1.老主库 关闭sql_log_binset sql_log_bin = off; 创建导出用户grant all privileges on *.* to 'dump'@ ...
- CRM 2016 一个IFrame_A 刷新另一个 IFrame_B
思路是 : 1 创建一个字段“new_xxx”. 2 注册字段 OnChange 事件. 3 OnChange 事件 刷新 IFrame_B子页面. CRM父页面JS: /// <summary ...
- mysql空间类型使用笔记
创建表,填充测试数据 create table geom1(id int not null auto_increment primary key,geo geometry); )); )); sele ...
- Spring IoC中各个注解的理解和使用
一.把在Spring的xml文件中配置bean改为Spring的注解来配置bean 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点:1.如果所有的 ...