2013-03-26 4 views
0

그래서 JSP 뷰와 JSTL 태그가있는 Spring 3 웹 애플리케이션을 작성하고 있습니다. 그들은 정상적으로 잘 작동하지만 태그를 적절히 잡지 못하는이 컨트롤러 호출이 있습니다. 내보기에서 참조 할 갈 때태그 컨텍스트가 아닌 URL의 JSTL 객체

ModelAndView mav = new ModelAndView(
    new RedirectView(RequestUtil.getWebAppRoot(request) + clientShortName, false) 
); 
mav.addObject("status","Session for interface successfully removed"); 
return mav; 

그래서 나는 보이는 라인을해야합니다 같은 :

status="" 

을 지금은 것입니다 : 그냥 표시

<p>status="${status}"</p> 

일반적으로 내 생각을 부적절하게 렌더링하는 원인으로이를 무시합니다. 그러나 실제로이 URL이 내 URL에 추가 된 것을 발견했습니다.

?status=Session+for+interface+zFXDEV3+successfully+removed 

그래서이 두 가지 질문으로 나를 잎 :

  1. 는 왜 JSTL 태그에서 개체를 참조 할 수 없습니다?
  2. 태그 컨텍스트의 일부로 가져올 수없는 경우 URL에서 무엇을하고 있습니까?

누구나 궁금 대한는, 클래스 유형은 다음과 같습니다 그것은 RedirectView입니다

org.springframework.web.servlet.view.RedirectView.RedirectView 
org.springframework.web.servlet.ModelAndView.ModelAndView(View view) 
+0

이것은 JSTL이 아니라 [Expression Language] (일반적으로 EL이라고도 함)입니다. 문제는 EL이 요청 속성에서 변수를 찾지 만 JSP로 리디렉션 할 때 요청 매개 변수로'status'를가집니다. –

+0

리디렉션 된 URL을 처리하는 컨트롤러가 반환 한보기의이 줄은 '

status = "$ {status}"

'입니까? –

답변

3

이것은 JSTL이 아니라 Expression Language (일반적으로 EL이라고 함)입니다. 문제는 EL ${status}이 요청 속성에서 변수를 검색하지만 JSP로 리디렉션 할 때 요청 매개 변수는 상태이지만 요청 속성은 아 닙니다 (페이지로 리디렉션 할 때 정상적인 동작 임). , @SotiriosDelimanolis에 의해 언급

  1. 으로 :

    <% 
        String status = (String) pageContext.findAttribute("status"); 
        if (status != null) { 
         out.print(status); 
        } 
    %> 
    

    당신은 여기에 두 가지 옵션이 있습니다

    (StackOverflow의 표현 언어 코드에서 가져온) 더 나은 예를 들어

    ,이 실행되는 것입니다 이 URL에 대한 @Controller 클래스는 요청 매개 변수를 가져와 요청 속성으로 추가해야합니다. 나중에 요청 매개 변수를 추가 할 수 있다면 많은 작업이 필요합니다.

  2. 요청 매개 변수에 액세스 할 수있는 EL의 ${param} 개체를 사용하십시오. 이를 사용하여 ${status}${param.status}으로 변경해야합니다. 이야기의 끝.

+0

+1을'$ {param}'솔루션에 사용합니다. –

+0

$ {param.status}로 프로덕션에 넣기 가장 통증이없고 확장 가능한 솔루션으로 이것을 받아들입니다. – darkpbj

1

때문입니다. Javadoc가 말한다 : 기본적으로

모든 원시적 인 모델 특성 (또는 그 컬렉션) HTTP 쿼리 매개 변수로 노출 있다 (그들은 URI 템플릿 변수로 사용되지했습니다 가정)하지만,이 동작을 변경할 수 있습니다 isEligibleProperty (String, Object) 메서드를 재정의합니다.

String 개체는 새 리디렉션 된 요청의 쿼리 매개 변수로 추가됩니다. 새로운 요청에 더 이상 모델/요청 속성으로 사용할 수 없습니다.

리디렉션 된 URL을 처리하는 @Controller은 모델에 특성을 다시 추가해야합니다.

+0

답변의 마지막 줄에만 동의합니다. –

+0

아하는 많은 의미가 있습니다. 나는 그것을 시험해 볼 것이고, 그것이 좋다면 받아 들일 것이다. – darkpbj

+0

@LuiggiMendoza, 좀 더 자세히 설명해 주시겠습니까? – darkpbj