(Struts2)如何从拦截器向Action实例添加新参数?

时间:2012-05-06 17:06:39

标签: struts2 interceptor actioncontext valuestack

我想制作一个拦截器来预处理XML请求。在此拦截器中,它解析XML并将处理后的信息放入ValueStack,以便它可以映射到操作中的实例。但是,我尝试了很多方法,但没有一个是有效的。任何人都可以帮助我并给我建议吗?谢谢!

  

拦截器

  //获取ValueStack
  ActionContext ctx = invocation.getInvocationContext();
  映射ctxMap = ctx.getValueStack()。getContext();

     

//尝试过以下操作,但以下任何一项均无效   ctxMap.get( “com.opensymphony.xwork2.ActionContext.parameters”))。把( “数据1”,   “1”);
  ctxMap.get(“parameters”))。put(“data1”,“1”);
  ctxMap.get(“request”))。put(“data1”,“1”);
  ctx.getParameters()。put(“data1”,new String [] {“1”});

//Sample Action Class
public class TestAction extends ActionSupport {
     private String data1;
     public String execute() {  
         System.out.println("data1 value: " + data1);
         return SUCCESS;
     }
//Get Setter is omitted here
}

1 个答案:

答案 0 :(得分:2)

您应该将处理后的值添加到拦截器

中的值堆栈中

ActionContext.getContext()getValueStack()的setValue(" DATA1",yourdata);

如果在拦截器调用时创建了动作实例,则应该添加该值。如果它不起作用,拦截器堆栈的顺序应该有问题。尝试将拦截器放在堆栈的底部,这样我们就可以保证其余的处理结束并且对你的action属性的绑定正在按预期工作。

相关问题