2011-08-04 3 views
5

HttpServletRequest 객체에서 getAttribute()를 호출하여 struts 값 스택에 저장된 값에 액세스하는 일부 코드를 발견했습니다. 나는 이것이 가능하다고 생각하지 않았으며 문서화 된 곳은 어디입니까? 액션 클래스HttpServletRequest 객체에서 Struts 값 스택에 액세스하는 방법은 무엇입니까?

코드 (단지 값 스택 클래스에 추가하지 않습니다는) :

private PaginatedChunk searchResults; 


public PaginatedChunk getSearchResults() { 
    return searchResults; 
} 

public void setSearchResults(PaginatedChunk searchResults) { 
    this.searchResults = searchResults; 
} 

이 요청에서 값을 가져옵니다 사용자 정의 태그의 코드 (그리고 그것은 작동 !?) :

HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); 
PaginatedChunk searchResults = (PaginatedChunk) request.getAttribute("searchResults"); 

누군가가 내게 어떻게 작동하는지 설명 할 수 있습니까? 나는 값 Stack이 요청을 통해 직접 접근 할 수 없다고 생각했다.

우리는 언뜻 struts2의 v2.1.8.1

답변

5

을 실행하고 동의 확실히 것이다. 당신이 보여주는 것은 직관적이지 않습니다. 하지만 실제로 일어나는 일은 값 스택에서 요청 객체에 대한 액세스를 얻는 것입니다. 그 반대의 경우도 마찬가지입니다. 값 스택에서 pageContext로 시작하고 여전히 값 스택에 액세스 할 수있는 끝에있는 작업을 계속 수행하고 있습니다 (요청에도 액세스 할 수 있습니다). 여기에 그런 일이 어떻게 :

93  public static PageContext getPageContext() { 
    94   return (PageContext) ActionContext.getContext().get(PAGE_CONTEXT); 
    95  } 

는 getContext()() 얻을 우리는 PageContext의 일종의 알고 object를 반환합니다.

여기에 보면 (http://www.docjar.com/html/api/org/apache/struts2/ServletActionContext.java.html는) 우리는 "pageContext와는"출처 참조 . 그러나 구현 클래스는 무엇입니까? 내 콘솔에서

<%@taglib prefix="s" uri="/struts-tags"%> 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE html> 
<html> 
    <body> 
     <h1>Request Access Test</h1> 
     <% 
      HttpServletRequest r = (HttpServletRequest) pageContext.getRequest(); 
      String aGreeting = (String) r.getAttribute("greeting"); 
      System.out.println(aGreeting); 
      System.out.println("R's class is:" + r.getClass().getCanonicalName()); 
     %> 
    </body> 
</html> 

나는 인쇄 참조 : 다음 JSP에 다음

package com.quaternion.action.test; 

import com.opensymphony.xwork2.ActionSupport; 

public class RequestAccessTest extends ActionSupport{ 
    public String getGreeting(){ 
     return "Hello from Request AccessTest"; 
    } 
} 

:

간단한 조치를 만들기

INFO: Hello from Request AccessTest 
INFO: R's class is:org.apache.struts2.dispatcher.StrutsRequestWrapper 

그래서 우리는 정말 StrutsRequestWrapper 다루고있는 (이제 우리는 우리가 실제로 다루는 것이 쉽다는 것을 안다.) ...

위의 링크를 보면

http://massapi.com/source/struts-2.2.1/src/core/src/main/java/org/apache/struts2/dispatcher/StrutsRequestWrapper.java.html

우리는 getAttribute를 참으로 무시되는 것을 알 수있다.

65 줄부터 시작하여 요청에서 값을 가져 오려고 시도하는 것을 확인한 다음 실패하면 값 스택에서 값을 가져옵니다.

여기에 문서가 기록되어 있습니까? 나는 지금 여기에 문서화되어 있다고 생각한다.)

+0

오, 후속 조치로 유용 할 수 있으며 일부 struts2 마법을 무시할 수있다. http://struts.apache.org/2.0.14/docs/what-is- the-actioncontext.html – Quaternion

관련 문제