使用Spring MVC 3.0.0.RELEASE,我有以下控制器:
@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中?
发布于 2013-03-29 21:16:11
从Spring3.1开始,RequestMappingHandlerAdapter
提供了一个名为ignoreDefaultModelOnRedirect
的标志,如果控制器重定向,您可以使用该标志来防止使用defautl模型的内容。
发布于 2011-03-23 20:23:16
model.asMap().clear();
return "redirect:" + news.getUrl();
:)
发布于 2010-01-30 01:25:55
没有好的方法来解决这个问题(例如,不创建自定义组件,不进行过多的显式xml配置,不进行RedirectView
的手动实例化)。
您可以通过其4参数构造函数手动实例化RedirectView
,或者在您的上下文中声明以下bean (在其他视图解析器附近):
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;
}
}
https://stackoverflow.com/questions/2163517
复制相似问题