将参数传递给struts2中的结果不起作用

时间:2010-11-22 10:01:43

标签: struts2

我已按如下方式配置结果:它是我的自定义结果类型。

<result-types>
    <result-type name="myBytesResult" class="blahblah.MyBytesResult" />
</result-types>


<action name="myAction" class="blahblah.MyAction">
    <result name="success" type="myBytesResult">
       <param name="pptId">${pptId}</param>
    </result>
</action>

我的结果是pptId的setter / getter,MyAction也有pptId的setter / getter。但是当我检查我的结果时,它没有设置pptId(我在结果中得到$ {pptId}作为字符串)。似乎没有从行动中获得好处。

同样的原因是什么?

代码MyAction

public String doDefault() {
       System.out.println("Default Called");
       setPptId("MyPpt");
      return "success";
  }

  public byte[] getMyImageInBytes() throws Exception { 
       try {
                //.....
       } catch (Exception e) {

       }
       return null;

  }


public String getContentType() {
    return contentType;
}

public void setContentType(String contentType) {
    this.contentType = contentType;
}

public String getPptId() {
    return this.pptId;
}

public void setPptId(String pptId) {
    this.pptId = pptId;
}

MyBytesResult

private String contentType;

private String pptId;


public void execute(ActionInvocation invocation) throws Exception {
    HttpServletResponse response = ServletActionContext.getResponse();
         //...Some more code for settign response
    System.out.println("pt Id[" + this.pptId + "]");

}


public String getContentType() {
    return contentType;
}


public void setContentType(String contentType) {
    this.contentType = contentType;
}


public String getPptId() {
    return pptId;
}


public void setPptId(String pptId) {
    this.pptId = pptId;
}

1 个答案:

答案 0 :(得分:0)

更新回答

所以,经过一番挖掘,看来这实际上是正常的。如果有必要,结果的责任是将传入数据评估为OGNL表达式。这是重定向和http标头结果的工作方式。您可以在自定义结果中对堆栈解析值,如下所示:

String resolvedPptId = TextParseUtil.translateVariables(pptId, stack)

来自translateVariables的Javadoc:

  

expression中$ {...}和%{...}的所有实例转换为调用{@link ValueStack#findValue(java.lang.String)}返回的值。如果一个项目不能   在堆栈上找到(返回null),然后整个变量$ {...}不是   显示,就好像该项目在堆栈上但返回一个空字符串。