我在调用 Spring 控制器后刷新 jsp 页面时遇到问题。 在我的索引页面中,我登录了,在用户输入用户名和密码后,表单被提交到控制器,然后验证并创建新的用户会话。完成所有这些后,我的页面刷新并且一切正常。当我实现更改页面语言的逻辑时,会出现问题。我也在做同样的事情,但这一次,页面没有刷新! 这是我迄今为止尝试过的:
JAVA代码:
@RequestMapping(value="/index", method=RequestMethod.GET)
public String initializeIndex(ModelMap model) {
// IMPLEMENT SOME BUSINESS LOGIC HERE
String l = (String) model.get("language");
if (l == null) {
l = "English"; //Default
}
model.addAttribute("currentLanguage", l);
return "index";
}
/**
* When the user login.
*
* @param model
* @return
*/
@RequestMapping(value="/welcome", method=RequestMethod.POST)
public String login(ModelMap model) {
// IMPLEMENT SOME BUSINESS LOGIC HERE
return "redirect:/index";
}
/**
* When the user change website language.
*
* @param model
* @return
*/
@RequestMapping(value="/changeLanguage", method=RequestMethod.POST)
public String changeLanguage(@RequestParam String language, ModelMap model) {
//CHANGE SITE LANGUAGE...
model.addAttribute("language", language);
return "redirect:/index";
}
编辑
这是我如何调用 /changeLanguage 方法。该函数在按钮单击事件后调用。
JS
function changeLanguage(language) {
$.ajax({
type: "POST",
url: "changeLanguage",
data: "language=" + language,
success: function(){
alert($('#languageHolder').val());
}
}
});
HTML
<input type="hidden" id="languageHolder" value='<c:out value="${currentLanguage}" />'/>
现在,当我调试应用程序时,我发现一切都运行完美。唯一的区别是,当调用 /welcome 方法并重定向到 /index 方法时,index.jsp 会刷新,而当调用 /changeLanguage 方法然后重定向到 /index 方法时,index.jsp 不会刷新。
另一个区别是,登录时我使用表单并提交表单。在更改语言中我使用ajax将数据提交到服务器。这可能是问题所在吗? 任何帮助将不胜感激。
编辑 我刚刚做了一些小实验:我在我的 index.jsp 中添加了一个支架 然后在控制器中我将“语言”变量设置为此持有者。然后我 在js中警告这个值并观察结果。 我只是编辑上面的代码。 我观察到 JAVA 代码运行完美 - 例如当模型中没有设置语言时,它会设置默认的“英语”并将其设置到模型中。此外,当存在此类属性时,我会使用它并将新值设置为模型。但是在js中,alert总是打印“English”???
我已经解决了我的问题。不是我希望的那样,但仍然...... 我解决这个问题的方法是在我的jsp中创建表单。在控制器中我创建一个 包装器“LanguageWrapper”并将其添加为模型属性。 最后,当单击按钮时,我提交表单“ $('#formName').submit();”还有这个 非常适合我。 我仍然不知道当使用ajax提交时页面不会刷新,当提交这样的表单时它会刷新。我会花一些时间研究这个... 如果有人对此有更多了解,请随意填写以添加更多信息。 希望我的回答可以帮助到其他有类似问题的人。