首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在spring MVC中传递重定向过程中的model属性,并在URL中避免相同的情况

在spring MVC中传递重定向过程中的model属性,并在URL中避免相同的情况
EN

Stack Overflow用户
提问于 2014-06-19 15:32:57
回答 2查看 83.3K关注 0票数 31

我的目标是在重定向期间将模型属性从控制器传递到JSP页面,并避免属性显示在URL中。下面的源代码使用java数据对象验证来自数据存储的登录。

控制器:

代码语言:javascript
复制
@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:

代码语言:javascript
复制
 <h1>Welcome ${USERNAME} </h1>

我当前的网址是/welcome?USERNAME=robin

我的目标是将其显示为/welcome

另外,我的页面应该显示"Welcome robin“,而它只显示Welcome。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-19 16:57:03

RedirectAttributes仅适用于RedirectView,请遵循相同的说明

代码语言:javascript
复制
@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参考手册)。这有两个兴趣:

  • 它们在URL中不可见
  • 您不仅可以传递字符串,还可以传递任意对象。
票数 73
EN

Stack Overflow用户

发布于 2016-03-01 04:24:22

你在这里需要小心,因为我认为你正在尝试做的事情是有充分理由不被支持的。“重定向”指令将向控制器发出GET请求。GET请求应该只使用请求参数检索现有状态,这是方法协定。GET请求不应该依赖于之前的交互,也不应该依赖于存储在会话中某个位置的任何对象。GET请求旨在检索现有(持久化)状态。原始(POST)请求应该持久化GET请求检索状态所需的所有内容。

在这种情况下,RedirectAttributes不是为支持你而设计的,即使你设法正确地使用它,它也只会工作一次,然后它们就会被销毁。如果您随后刷新浏览器,您将得到一个应用程序错误,因为它无法再找到您的属性。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24301114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档