java重定向问题

今天在开发雀巢水新需求的过程中,发现java部分是直接返回页面的,不是那种前台 ajax 调用接口返回值,以前没在意,直到新需求要求不同的商品对应不同的支付方式(蛋疼),水票还不能单独购买。好了。。。担心用户单独购买水票或者几种不同支付方式的商品一起购买,结果肯定不给跳到订单提交页的,但是由于后台接口用的是public ModelAndView这种声明方式,注定必须返回页面的,不管往哪跳反正都得跳,哪怕本页刷新也行,这就有点操蛋了,一开始就想着给用户提个醒,毕竟前台也有alert优化框,弹出来提醒一下不就好了吗。但关键问题就在这,java初学者只能依葫芦画瓢,有的依还好,没得依就惨了,毕竟和那种ajax调接口的方式不同,不是那种:

1
2
3
4
5
6
7
$.post("接口",function (data) {
if (data.success) {
// ...
} else {
console.log("接口调用失败");
}
}

而是这种:

1
2
rtv.setMsg("水票不能单独购买!");
mv.setViewName("redirect:/......");

当时想了很久,毕竟java很菜,就是想不通该用什么方法才能在页面刷新情况下给个返回值告诉用户,你这种下单组合不对,不能这么搞。。。
从人道主义精神和用户体验角度来说,必须得提醒用户,不然得被喷死啊。后来请教师傅,告诉我他写的某个接口有类似的,师傅无师自通,我纠结了许久的问题找到了解决方案。
但是,抄作业都抄不对啊。。。
我抄的:

1
2
3
mv.addObject("msg", "你选择的商品无法一起下单!");
mv.setViewName("redirect:/...");
return mv;

师傅的:

1
2
3
mv.addObject("msg", "你选择的商品无法一起下单!");
mv.setViewName("...");
return mv;

两段代码明显差异就是一个有redirect:一个没有
也就是说,一个重定向了一个没重定向,都是跳这个页面。

我加了重定向,页面跳转了,但是没有弹出框提醒,倒是msg信息显示在浏览器地址栏后面,不加重定向反而正常弹框提醒(前台能取到值了)。

这时候我就奇怪了,重定向和不加重定向跳同一个页面有什么区别?

后来学习JSP基础时发现,请求的转发只发出了一次请求,而重定向则发出了两次请求。请求的重定向时,地址栏不再是初次发出的请求地址。地址栏为最后响应的那个地址。

Newer Post

闭包

参考了《JavaScript高级程序设计》和阮一峰先生的博客http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html 概念 闭包是指有权访问另一个函数作用域中的变量的函数。 理解:1.闭包首先肯定是一个函数。2 …

继续阅读
Older Post

Object.getOwnPropertyDescriptor()和Object.getOwnPropertyDescriptors()还有Object.getPrototypeOf()

Object.getOwnPropertyDescriptor() 方法返回指定对象上一个自有属性对应的属性描述符。(自有属性指的是直接赋予该对象的属性,不需要从原型链上进行查找的属性) 语法:Object.getOwnPropertyDescriptor(obj, prop) 参数 obj:需要 …

继续阅读