2011-05-13 5 views
0

jsp 사이트에서 request.getAttribute를 사용하여 속성을 가져옵니다. jsf (같은 바람둥이에서 실행 중)에서 해당 속성을 가져 오는 방법을 찾고 있습니다. 이것은 내가 인터넷에서 발견 한 것입니다 :jsf에 대한 HttpServletRequest

HttpServletRequest requestObj = (HttpServletRequest)   
FacesContext.getCurrentInstance().getExternalContext().getRequest(); 
    String value = (String) requestObj.getAttribute("property"); 

그러나 결과 (값)은 null로 유지됩니다.

가능한 첫 번째 경우에는 작동하지만 두 번째 경우에는 작동하지 않을 수 있습니다.

+0

url 변수에 액세스하려는 중이거나 request.getAttribute를 찾고 계십니까? –

+0

후자! 어떤 버그인가 : jsp 사이트에서 어떤 방식으로 jsp 사이트를 호출했는지에 상관없이 그 속성을 얻을 수 있습니다. 그것은 단지 항상 거기에 있습니다. 어쩌면 내가 그 요청 개체가 이해가 안돼. – jonas456

답변

4

가능한 첫 번째 경우에는 작동하지만 두 번째 경우에는 작동하지 않을 수 있습니다. 속성이 더 이상이없는 경우

는, 그것은 단순히 완전히 다른 요청에 관한 것이다. 리디렉션을 보내거나 웹 브라우저에서 새 요청을 보냈을 가능성이 큽니다. 문제의 실제 요구 사항은 기능 요구 사항에 대해 자세히 설명하지 않았으므로 제공하기가 어렵습니다. 방금 일부 코드 스 니펫을 게시하고 "왜 작동하지 않습니까?"라고 말했습니다.

어떤 식 으로든 요청 속성은 요청/응답 자체만큼 오래 지속되며 이후 요청에서는 유지되지 않습니다. 이를 위해서는 대신 세션 속성으로 저장하거나 리디렉션의 경우 요청 매개 변수로 전달하는 것이 좋습니다. 또는 이미 JSF 2.0을 사용하고있는 경우 뷰 범위 Bean의 속성으로 저장하면 이후에 동일한 뷰에서 Bean에 액세스해야하는 경우에도 수행해야합니다.

HTTP 서블릿 요청/응답의 수명주기에 대해 자세히 알아 보려면 this answer을 통해 직접 해보는 것이 좋습니다. 당신은 JSF 커버 아래에서 원시 서블릿 API를 운반해야 할 때마다, 당신은 정말 휴식을해야하고 당신이 정말로 일을 올바른 방법을 수행하는 경우 두 번 생각 : 구체적인 문제에


관련없는 (읽음 : raw javax.servlet API로 폴백 할 필요 없음). 예를 들어 완전한 JSF 관리 빈을 사용하는 것이 좋을까요?

어떤 식 으로든 요청 속성은 ExternalContext#getRequestMap()으로 액세스 할 수 있습니다.

Map<String, Object> requestMap = FacesContext.getCurrentInstance().getExternalContext().getRequestMap(); 
String value = (String) requestMap.get("property"); 

원시 Servlet API를 사용할 필요가 없습니다.

관련 문제