2014-09-21 4 views
1

스프링 컨트롤러를 호출 한 후 내 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에서 경고는 항상 "영어"로 인쇄됩니까 ???

+0

어떻게/changeLanguage 컨트롤러를 사용하고 계십니까? POST 요청을하고 있습니까, 아니면 GET 요청을하고 있습니까? Jquery ajax 또는 다른 유사한 방법을 사용하여 양식 데이터를 제출하고 있습니까? changeLanguage를 호출하는 데 사용할 코드를 게시해야합니다. –

+0

POST 요청을 사용하고 있습니다. 버튼을 클릭하여 호출됩니다. –

+0

컨트롤러를 호출하는 데 사용되는 디버그 라인을 추가 했습니까? 컨트롤러를 호출하는 데 사용하는 코드를 게시 할 수 있습니까? –

답변

0

나는 내 문제를 해결했습니다. 내가 원하는 바는 아니지만 여전히 ... 내가 해결 한 방법은 jsp에서 양식을 만드는 것입니다. 컨트롤러에서 하나의 래퍼 "LanguageWrapper"를 만들고 모델 속성처럼 추가하십시오. 마지막으로 버튼을 클릭하면 "$ ('# formName') 양식을 제출합니다. submit();" 이 이 나를 위해 완벽하게 작동합니다. 아약스와 함께 제출할 때 내 페이지가 새로 고쳐지지 않을 때도 알지 못합니다.이 양식을 새로 고침하면 새로 고침됩니다. 나는 이것을 연구하는 데 약간의 시간을 할애 할 것이다 ... 누군가가 이것에 대해 더 많이 알고 있다면, 더 많은 정보를 더하기 위해 자유롭게 기입해라. 제 대답이 비슷한 문제를 가진 다른 사람들을 도울 수 있기를 바랍니다.