spring mvc 问题请教,重定向。

岽茗 发布于 2015/07/19 20:23
阅读 462
收藏 0
spring mvc 问题请教。。。。。。。。。。

操作的实体contact(联系人)
ContactController 里面有两个方法:

//   “/contact” 是默认调用的处理方法
@RequestMapping(method = RequestMethod.GET)
public String list(
     @RequestParam(value = "page", defaultValue = "1") int pageNumber,
     @RequestParam(value = "page.size", defaultValue = PAGE_SIZE) int pageSize,
     @RequestParam(value = "sortType", defaultValue = "auto") String sortType,
     Model model, ServletRequest request) {
     。。。。。。。。。。。。。。。
     // 将搜索条件编码成字符串,用于排序,分页的URL
     model.addAttribute("searchParams", Servlets.encodeParameterStringWithPrefix(searchParams, "search_"));
     return "contact/contactList";
}


//根据联系人ID(一个或多个),对联系人进行删除
@RequestMapping(value = "delete")
public String delete(
     @RequestParam(value = "page", defaultValue = "1") int pageNumber,
     @RequestParam(value = "page.size", defaultValue = PAGE_SIZE) int pageSize,
     @RequestParam(value = "sortType", defaultValue = "auto") String sortType,
     Model model, ServletRequest request) {
     。。。。。。。。。。。。。。。
     model.addAttribute("message", "成功删除联系人信息!");//最终非redirect,所以使用model保存操作结果信息。
     return list(pageNumber, pageSize, sortType, model, request);
     return "redirect:/contact/";
}

目的:
1、http://localhost:8080/crm/contact?+一堆查询参数串。。。。。
---没问题,
通过
model.addAttribute("searchParams", Servlets.encodeParameterStringWithPrefix(searchParams, "search_"));
return "contact/contactList";
后,返回的 联系人列表页面 之前的查询参数都在。

2、选中 联系人 进行删除操作。
提交的url是 http://localhost:8080/crm/delete
controller的delete 方法,我之所以放那么多参数,就是为了在delete方法中调用 list()方法,list()方法中对页面的参数有些特殊处理。

delete()方法中最后:
情况1:return list(pageNumber, pageSize, sortType, model, request);
此情况会依照list方法,将导向 联系人列表页面(return "contact/contactList";),而且还是按照之前的查询参数查询出符合提交的联系人。并且之前的查询条件在页面上也可以展示。

但问题是:浏览器上的URL是 http://localhost:8080/crm/contact/delete?+一堆查询条件
这种情况下如果刷新页面会有问题。

我的目标是:
step1:http://localhost:8080/crm/contact?+一堆查询参数串。。。。。查询出符合条件的联系人
------这点没问题。
step2:http://localhost:8080/crm/delete 提交后,删除成功后。浏览器的url是
http://localhost:8080/crm/contact?+一堆查询参数串。。。。。

在delete()方法的最后,我可以直接 return "redirect:/contact/"; 进行重定向,但这样最终是“http://localhost:8080/crm/contact”没有任何查询条件的查询。

不知道有没有表达清楚。
加载中
0
岽茗
岽茗
step2:http://localhost:8080/crm/delete 提交后,删除成功后。浏览器的url是

http://localhost:8080/crm/contact?+一堆查询参数串。。。。。

写错了,

应该是

step2:http://localhost:8080/crm/contact/delete 提交后,删除成功后。浏览器的url是
http://localhost:8080/crm/contact?+一堆查询参数串。。。。。

0
岽茗
岽茗

找到办法了。。

delete()方法的最后这么写:

Map<String, Object> searchParams = Servlets.getParametersStartingWith(request, "search_");
String searchStr = Servlets.encodeParameterStringWithPrefix(searchParams, "search_");
return "redirect:/contact/?" + searchStr;

以上能实现删除后的url是:http://localhost:8080/crm/contact?+一堆查询参数串。。。。。

但新问题来了,删除成功的消息放在那里,因为最终是重定向。

0
岽茗
岽茗

哎。。脑子都晕了。。。。

重定向信息有 RedirectAttributes

0
岽茗
岽茗
自言自语呀。。。我。。。。。。
0
岽茗
岽茗
2004年至2009年干开发,后来去个公司,做实施的。。。。做了6年实施。。。荒废了6年。。。。现在加紧赶重新拾起开发。。。
返回顶部
顶部