스프링 컨트롤러를 호출 한 후 내 JSP 페이지를 새로 고치는 데 문제가 있습니다. 내 인덱스 페이지에 로그인이 있으며 사용자가 사용자 이름과 암호를 입력하면 양식이 컨트롤러에 제출 된 다음 새 사용자 세션을 확인하고 생성합니다. 이 모든 후 내 페이지가 새로 고쳐지고 모든 것이 잘 작동합니다. 문제는 페이지 언어를 변경하는 로직을 구현할 때 발생합니다. 나도 같은 일을하고 있지만 이번에는 페이지가 상쾌하지 않다! 여기 내가 지금까지 시도한 것입니다 :스프링 컨트롤러에서 jsp 페이지 새로 고침
자바 코드 :
@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}" />'/>
는 지금, 나는 모든 것이 완벽하게 작동하고 있음을 참조하십시오. 유일한 차이점은 call/welcome 메소드와/index 메소드로 리디렉션 할 때 index.jsp를 새로 고치고 call/changeLanguage 메소드를 호출 한 다음/index 메소드를 호출하면 index.jsp가 새로 고쳐지지 않는다는 것입니다.
다른 차이점은 로그인시 사용자가 양식을 작성하여 양식을 제출한다는 것입니다. 변경 언어에서 저는 서버에 데이터를 전송하기 위해 ajax를 사용합니다. 이것이 문제가 될 수 있습니까? 도움이 될 것입니다.
편집 난 그냥 몇 가지 작은 실험을 만들었다 : 내 index.jsp를 하나 개의 홀더를 추가 한 다음 컨트롤러에서 나는이 홀더 "언어"변수를 설정하고있다. 그런 다음 나는 js에서이 값을 경고하고 결과를 관찰합니다. 위의 코드를 편집하기 만하면됩니다. 내가 관찰 한 것은 자바 코드가 완벽하게 작동하고 있다는 것입니다. 모델에 언어가 설정되어 있지 않으면 기본 "영어"를 설정하고이를 모델로 설정합니다. 또한 그러한 속성이있을 때 그것을 사용하고 모델에 새 값을 설정합니다. 하지만 js에서 경고는 항상 "영어"로 인쇄됩니까 ???
어떻게/changeLanguage 컨트롤러를 사용하고 계십니까? POST 요청을하고 있습니까, 아니면 GET 요청을하고 있습니까? Jquery ajax 또는 다른 유사한 방법을 사용하여 양식 데이터를 제출하고 있습니까? changeLanguage를 호출하는 데 사용할 코드를 게시해야합니다. –
POST 요청을 사용하고 있습니다. 버튼을 클릭하여 호출됩니다. –
컨트롤러를 호출하는 데 사용되는 디버그 라인을 추가 했습니까? 컨트롤러를 호출하는 데 사용하는 코드를 게시 할 수 있습니까? –