我的目标是在重定向期间将模型属性从控制器传递到JSP页面,并避免属性显示在URL中。下面的源代码使用java数据对象验证来自数据存储的登录。
控制器:
@Controller
public class LoginController {
int count;
PersistenceManager pm = PMF.get().getPersistenceManager();
//Instance of data class
User user;
ModelAndView modelAndView=new ModelAndView();
@RequestMapping(value="/Login",method = RequestMethod.POST)
public ModelAndView loginValidate(HttpServletRequest req){
//Getting login values
String uname=req.getParameter("nameLogin");
String pswd1=req.getParameter("pswdLogin");
count=0;
user=new User();
//Generating Query
Query q = pm.newQuery(User.class);
q.setFilter("userName == userNameParam");
q.declareParameters("String userNameParam");
try{
List<User> results = (List<User>) q.execute(uname);
for (User u: results) {
String userName=u.getUserName();
if(userName.equals(uname)){
System.out.println(u.getPassword());
if(u.getPassword().equals(pswd1)){
count=count+1;
modelAndView.setViewName("redirect:welcome");
modelAndView.addObject("USERNAME",uname);
return modelAndView;
}
//rest of the logic
}JSP:
<h1>Welcome ${USERNAME} </h1>我当前的网址是/welcome?USERNAME=robin
我的目标是将其显示为/welcome
另外,我的页面应该显示"Welcome robin“,而它只显示Welcome。
发布于 2014-06-19 16:57:03
RedirectAttributes仅适用于RedirectView,请遵循相同的说明
@RequestMapping(value="/Login",method = RequestMethod.POST)
public RedirectView loginValidate(HttpServletRequest req, RedirectAttributes redir){
...
redirectView= new RedirectView("/foo",true);
redir.addFlashAttribute("USERNAME",uname);
return redirectView;
}这些flash属性通过会话传递(并在使用后立即销毁-有关详细信息,请参阅Spring参考手册)。这有两个兴趣:
发布于 2016-03-01 04:24:22
你在这里需要小心,因为我认为你正在尝试做的事情是有充分理由不被支持的。“重定向”指令将向控制器发出GET请求。GET请求应该只使用请求参数检索现有状态,这是方法协定。GET请求不应该依赖于之前的交互,也不应该依赖于存储在会话中某个位置的任何对象。GET请求旨在检索现有(持久化)状态。原始(POST)请求应该持久化GET请求检索状态所需的所有内容。
在这种情况下,RedirectAttributes不是为支持你而设计的,即使你设法正确地使用它,它也只会工作一次,然后它们就会被销毁。如果您随后刷新浏览器,您将得到一个应用程序错误,因为它无法再找到您的属性。
https://stackoverflow.com/questions/24301114
复制相似问题