首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何防止Spring 3.0 MVC @ModelAttribute变量出现在URL中?

如何防止Spring 3.0 MVC @ModelAttribute变量出现在URL中?
EN

Stack Overflow用户
提问于 2010-01-30 00:53:35
回答 11查看 49.7K关注 0票数 56

使用Spring MVC 3.0.0.RELEASE,我有以下控制器:

代码语言:javascript
复制
@Controller
@RequestMapping("/addIntake.htm")
public class AddIntakeController{

  private final Collection<String> users;

  public AddIntakeController(){
    users = new ArrayList<String>();
    users.add("user1");
    users.add("user2");
    // ...
    users.add("userN");
  }

  @ModelAttribute("users")
  public Collection<String> getUsers(){
    return this.users;
  }

  @RequestMapping(method=RequestMethod.GET)
  public String setupForm(ModelMap model){

    // Set up command object
    Intake intake = new Intake();
    intake.setIntakeDate(new Date());
    model.addAttribute("intake", intake);

    return "addIntake";
  }

  @RequestMapping(method=RequestMethod.POST)
  public String addIntake(@ModelAttribute("intake")Intake intake, BindingResult result){

    // Validate Intake command object and persist to database
    // ...

    String caseNumber = assignIntakeACaseNumber();

    return "redirect:intakeDetails.htm?caseNumber=" + caseNumber;

  }

}

控制器从从HTML表单填充的命令对象中读取入口信息,验证命令对象,将信息持久化到数据库,并返回案例编号。

一切都很好,除了当我重定向到intakeDetails.htm页面时,我得到了一个看起来像这样的网址:

http://localhost:8080/project/intakeDetails.htm?caseNumber=1&users=user1&users=user2&users=user3&users=user4...

如何防止用户集合显示在URL中?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2013-03-29 21:16:11

从Spring3.1开始,RequestMappingHandlerAdapter提供了一个名为ignoreDefaultModelOnRedirect的标志,如果控制器重定向,您可以使用该标志来防止使用defautl模型的内容。

票数 30
EN

Stack Overflow用户

发布于 2011-03-23 20:23:16

代码语言:javascript
复制
model.asMap().clear();
return "redirect:" + news.getUrl();

:)

票数 38
EN

Stack Overflow用户

发布于 2010-01-30 01:25:55

没有好的方法来解决这个问题(例如,不创建自定义组件,不进行过多的显式xml配置,不进行RedirectView的手动实例化)。

您可以通过其4参数构造函数手动实例化RedirectView,或者在您的上下文中声明以下bean (在其他视图解析器附近):

代码语言:javascript
复制
public class RedirectViewResolver implements ViewResolver, Ordered {
    // Have a highest priority by default
    private int order = Integer.MIN_VALUE; 

    // Uses this prefix to avoid interference with the default behaviour
    public static final String REDIRECT_URL_PREFIX = "redirectWithoutModel:";     

    public View resolveViewName(String viewName, Locale arg1) throws Exception {
        if (viewName.startsWith(REDIRECT_URL_PREFIX)) {
            String redirectUrl = viewName.substring(REDIRECT_URL_PREFIX.length());
            return new RedirectView(redirectUrl, true, true, false);
        }
        return null;
    }

    public int getOrder() {
        return order;
    }

    public void setOrder(int order) {
        this.order = order;
    }
}
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2163517

复制
相关文章

相似问题

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