문제

속성을 설정할 수 있습니다. 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) -- 객체를 스택의 루트에 배치합니다.

뷰 레이어 내에서 스택에 아무 ​​것도 배치할 필요가 없으므로 이를 필요로 하기 위해 무엇을 하려는지 궁금합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top