struts2의 애플리케이션 전반에 걸쳐 ValueStack 수명주기가 있습니까?
-
15-11-2019 - |
문제
속성을 설정할 수 있습니다. ValueStack
여러 가지 방법으로.
ValueStack stack = ActionContext.getContext().getValueStack();
stack.getContext().put("resultDTO",resultDTO); //1. creates a different branch
//parallel to root
stack.set("resultDTO", resultDTO); //2. pushes on root as a Map?
stack.push(resultDTO); //3. pushes on root
myActionClass.setProperty(); //4. normal action accessor
JSP, freemarker 및 Java에서 이러한 모든 값을 다시 가져올 수 있어야 합니다.
stack.findValue() or stack.findString().
이 4가지 설정 방법 각각의 수명주기에 대해 알고 싶습니다.애플리케이션 전반에 걸쳐 있습니까?는 밸류스택 모든 요청이 생성되고 모든 요청에 대해 애플리케이션 및 세션 값이 설정됩니까?
나는 네 번째 방법이 가장 일반적인 접근 방식이라는 것을 알고 있지만 액션 클래스에 쉽게 접근할 수 없는 모든 장소에서 그것을 사용하지 않을 수도 있습니다.
JSP에서의 액세스에 대해 또 다른 의문이 있습니다.
<s:push value="resultDTO" ><s:property value="data.form1[0]" /></s:push>
<!--5.works for context.put() & stack.set() both-->
<s:property value="#resultDTO.data.form1[0].countryofissue" /> <!--6.context.put()-->
<s:property value="resultDTO.data.form1[0].countryofissue" /> <!--7.stack.set()-->
<s:property value="data.form1[0].countryofissue" /> <!--8.stack.push()-->
또한 5번째 포인트가 두 가지 모두에서 어떻게 작동하는지 알고 싶습니다. stack.getContex().put()
그리고 stack.set()
?6일에는 이해해요 결과DTO 내가 액세스하고 있는 것은 다른 루트이고 7번째에서는 ValueStack인 기본 루트의 자식입니다.8번째에서는 기본 루트부터 검색을 시작합니다.
나는 겪었다 http://struts.apache.org/2.0.11.1/docs/ognl.html, http://struts.apache.org/2.1.2/struts2-core/apidocs/com/opensymphony/xwork2/util/ValueStack.html 이 링크가 오히려 혼란스럽네요 http://www.opensymphony.com/ognl/html/DeveloperGuide/introduction.html#embeddingOGNL
이 모든 것을 말하면서 나는 거의 사용하고 싶지 않습니다. stack.getContext().put()
URL을 다음과 같이 설정하면 값을 명확하게 볼 수 있습니다. ?디버그=브라우저.내가 잘못하고 있는지 알려주십시오.
해결책
그만큼 ValueStack
요청에 따른 것입니다.스택에 값을 배치하면 나중에 요청(예: 뷰 계층)에서 액세스할 수 있지만 리디렉션에서는 유지되지 않습니다. 이는 새로운 HTTP 요청이며 자체적인 요청입니다. ValueStack
.
일반적인 조건에서는 URL 또는 양식 게시물의 매개변수가 작업의 setter 메서드를 사용하여 작업에 설정됩니다.인터셉터에서는 스택에 직접 값을 추가할 수 있습니다.예를 들어, ExceptionMappingInterceptor
을 사용합니다 stack.push(Object)
오류 페이지에 사용할 예외를 게시하는 방법입니다.
stack.getContext().put(String, Object)
-- 스택에 있는 맵에 키/값을 배치합니다.맵은 스택의 컨텍스트를 나타냅니다.stack.set(String, Object)
-- 스택에 있는 맵에 키/값을 배치합니다.이것이 다른 맵이라는 것 외에는 이전 방법과 어떤 관련이 있는지 잘 모르겠습니다.stack.push(Object)
-- 객체를 스택의 루트에 배치합니다.
뷰 레이어 내에서 스택에 아무 것도 배치할 필요가 없으므로 이를 필요로 하기 위해 무엇을 하려는지 궁금합니다.