我已按如下方式配置结果:它是我的自定义结果类型。
<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;
}
答案 0 :(得分:0)
更新回答
所以,经过一番挖掘,看来这实际上是正常的。如果有必要,结果的责任是将传入数据评估为OGNL表达式。这是重定向和http标头结果的工作方式。您可以在自定义结果中对堆栈解析值,如下所示:
String resolvedPptId = TextParseUtil.translateVariables(pptId, stack)
来自translateVariables
的Javadoc:
将
expression
中$ {...}和%{...}的所有实例转换为调用{@link ValueStack#findValue(java.lang.String)}返回的值。如果一个项目不能 在堆栈上找到(返回null),然后整个变量$ {...}不是 显示,就好像该项目在堆栈上但返回一个空字符串。