Pergunta

Posso definir uma propriedade ValueStack em várias formas.

 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

Eu preciso conseguir todos esses valores de volta em JSP, freemarker e java como

 stack.findValue() or stack.findString().    

Quero saber sobre o ciclo de vida de cada um desses 4 métodos de configuração.É em todos os aplicativos.É o ValueStack criou todas as solicitações e os valores do aplicativo e da sessão são definidos para cada solicitação?

Eu sei que o quarto método é a abordagem mais comum, mas posso não usá-lo em todos os lugares onde a classe de ação não é facilmente acessível.

Estou com outra dúvida sobre acesso em 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()-->

Eu também quero saber como funciona o 5º ponto em ambos stack.getContex().put() e stack.set()?Eu entendo que na 6ª resultadoDTO Estou acessando, é uma raiz diferente e na 7ª é filho da raiz padrão, que é o ValueStack.No 8º ele começa a pesquisar na raiz padrão.

Eu atravessei 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 e bastante confuso este link http://www.opensymphony.com/ognl/html/DeveloperGuide/introduction.html#embeddingOGNL

Tendo dito tudo isso, estou pouco inclinado a usar stack.getContext().put() método, pois posso ver claramente os valores definindo o URL como ?debug=navegador.Avise-me se eu estiver errado.

Foi útil?

Solução

O ValueStack é por solicitação.Se você colocar valores na pilha, eles estarão acessíveis posteriormente na solicitação (ou seja, na camada de visualização), mas não sobreviveriam a um redirecionamento, que seria uma nova solicitação HTTP e teria seu próprio ValueStack.

Em condições normais, os parâmetros na URL ou em uma postagem de formulário seriam definidos na ação usando os métodos setter da ação.Em um interceptor, você pode adicionar valores diretamente à pilha.Por exemplo, o ExceptionMappingInterceptor usa o stack.push(Object) método para publicar exceções para uso em páginas de erro.

  • stack.getContext().put(String, Object) - Coloca a chave/valor em um mapa que fica na pilha.O mapa representa o contexto da pilha.
  • stack.set(String, Object) -- Coloca a chave/valor em um mapa que fica na pilha.Não tenho certeza de como isso se relaciona com o método anterior, exceto que é um mapa diferente.
  • stack.push(Object) -- Isso coloca o objeto na raiz da pilha.

Você não deve precisar colocar nada na pilha dentro da camada de visualização, então estou curioso para saber o que você está tentando fazer que exige isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top