我的控制器如下
@Controller
@RequestMapping(value="/users")
@SessionAttributes("searchUsersDTO")
public class UserController {
@Autowired
private UserService usersService;
@RequestMapping
public String users(Model model){
model.addAttribute("searchUsersDTO", new SearchUsersDTO());
return "search_for_users_page";
}
@RequestMapping(value="/search",method=RequestMethod.GET)
public String search(@ModelAttribute SearchUsersDTO searchUsersDTO,Model model){
List<UserDetail> list=usersService.search(searchUsersDTO);
model.addAttribute("usersList", list);
return "users_list_page";
}
@RequestMapping(value="/edit",method=RequestMethod.GET)
public String edit(@RequestParam(value="userId") Integer userId,Model model){
UserDetail detail=usersService.fetchUserDetails(userId);
model.addAttribute("userDetails", detail);
return "users_edit_view";
}
@RequestMapping(value="/save",method=RequestMethod.POST)
public String save(UserDetailsDTO userDetailsDTO,Model model){
usersService.updateUserDetails(userDetailsDTO);
return "redirect:/users/search";
}
}
web.xml中的servlet映射
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<init-param>
<param-name>spring.profiles.active</param-name>
<param-value>dev</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Frist我会搜索用户。它将显示用户列表 然后我将选择要编辑的用户,它将显示编辑视图以及用户的所有详细信息。
然后修改并保存详细信息,这将调用保存方法,保存详细信息后,应导航回搜索视图。
每件事都很好。但保存后,浏览器网址显示为context/users/save
,但我需要context/users/search
。
我找出了问题的原因。需要解决方案
我的users_edit_view
已包含jquery.mobile-1.3.2.min.js
,我在删除此lib后尝试了。然后它按预期工作。
不知道为什么会引起这个问题。以及如何解决它。
答案 0 :(得分:2)
问题(我除外)是使用jquery-mobile。 我通过在jquery-mobile之前添加以下脚本来禁用ajax。 现在它按照我的意愿工作。
<script type="text/javascript">
$(document).bind("mobileinit", function () {
$.mobile.ajaxEnabled = false;
});
</script>
<script src="../js/jquery.mobile-1.3.2.min.js" th:src="@{/cms/js/jquery.mobile-1.3.2.min.js}"></script>
或
我们可以在每个表单标记上添加data-ajax=false
。
答案 1 :(得分:0)
这会有帮助吗? Spring MVC Controller redirect using URL parameters instead of in response
当你返回一个前缀为“redirect:”的视图名称时,无论如何,Spring MVC会将其转换为RedirectView对象,它只是将setExposeModelAttributes设置为true(我认为这是一个奇数值,默认为)。
如果您只使用return "redirect: /search"
而该怎么办?
实际上,您使用的return "redirect: users/search"
在我的项目中有效。
我想也许你应该在重定向之前将对象绑定到你的模型。
List<UserDetail> list=usersService.search(something);
model.addAttribute("usersList", list);
model.addAttribute("userList",userList);
好像你在开头用“/”返回,比如
return "redirect: /text1/text2"
它会重定向到网址context/text1/text2
如果你使用,
return "redirect: text1"
它会替换网址中的最后一项,例如,从context/Main/old
到context/Main/text1
我们的测试之间的唯一区别是我的控制器的映射不以"/"
开头。但即使我改变了它,重定向仍然有效。
我有我的控制器:
@RequestMapping(value = "/Main") or(value = "Main")
都适用于
redirect:/Main/index.do or redirect:index.do
答案 2 :(得分:0)
即使是jquery.mobile-1.4.5.min.js也会引发同样的问题,并且在表单标签中添加data-ajax =“false”会在POST之后修复服务器上的重定向。谢谢你的提示。