如何获取所有视图范围的对象?
How to get all view-scope object?
我正在尝试记录 Action 传递给 View 的所有输出视图范围对象(与 JSP 一样)。
我想从操作 本身打印所有这些。我的意思是:在动作执行结束时,就在 'ActionResult' return 语句之前。
例如,我想做如下事情:
public class HelloWorldAction extends ActionSupport
{
private String errorMessage;
public String getErrorMessage()
{
return this.errorMessage;
}
public void setErrorMessage(String errorMessage)
{
this.errorMessage = errorMessage;
}
public String execute()
{
this.setErrorMessage("Error!!!");
Enumeration keys = ServletActionContext.getResponse().getParameterNames();
StringBuilder strB5r = new StringBuilder();
strB5r.append("Response parameters : ");
while (keys.hasMoreElements())
{
String key = (String)keys.nextElement();
strB5r.append("[").append(key).append(": ").append(ServletActionContext.getResponse().getAttribute(key).toString()).append("]");
}
System.out.println(strB5r.toString());
return Action.SUCCESS;
}
}
我希望在 cosole 中看到输出为:
Response parameters : [errorMessage : Error!!!]
问题是
ServletActionContext.getResponse().getParameterNames();
不存在,与我们可以处理的请求相反:
ServletActionContext.getRequest().getParameterNames();
我们如何才能列出操作中的所有输出视图范围对象?
Ps。我宁愿不使用 java 反射,原因有很多:主要是性能。
只有反射有效。
在视图层之前,动作本身被压入值堆栈。
S2 标签(和 JSP EL 通过请求包装器)使用 OGNL 从值堆栈中检索值。 OGNL 使用反射。例如,${errorMessage}
正在使用反射从值堆栈顶部的操作中检索值。
值不是单独存在的,它们 "embedded" 在放置在值堆栈上的对象中。
您需要获取值堆栈 和 操作,迭代堆栈内容,并通过反射检索所有可公开访问的值(方法和道具)以获得堆栈 和 可访问的内容。 (我不记得堆栈内容的其余部分是否已经在操作中可用,或者以后是否添加了更多内容。这也没有考虑任何其他会修改堆栈预览的机制。)
这就是S2调试标签在视图层的作用;你可以改用它。
我正在尝试记录 Action 传递给 View 的所有输出视图范围对象(与 JSP 一样)。
我想从操作 本身打印所有这些。我的意思是:在动作执行结束时,就在 'ActionResult' return 语句之前。
例如,我想做如下事情:
public class HelloWorldAction extends ActionSupport
{
private String errorMessage;
public String getErrorMessage()
{
return this.errorMessage;
}
public void setErrorMessage(String errorMessage)
{
this.errorMessage = errorMessage;
}
public String execute()
{
this.setErrorMessage("Error!!!");
Enumeration keys = ServletActionContext.getResponse().getParameterNames();
StringBuilder strB5r = new StringBuilder();
strB5r.append("Response parameters : ");
while (keys.hasMoreElements())
{
String key = (String)keys.nextElement();
strB5r.append("[").append(key).append(": ").append(ServletActionContext.getResponse().getAttribute(key).toString()).append("]");
}
System.out.println(strB5r.toString());
return Action.SUCCESS;
}
}
我希望在 cosole 中看到输出为:
Response parameters : [errorMessage : Error!!!]
问题是
ServletActionContext.getResponse().getParameterNames();
不存在,与我们可以处理的请求相反:
ServletActionContext.getRequest().getParameterNames();
我们如何才能列出操作中的所有输出视图范围对象?
Ps。我宁愿不使用 java 反射,原因有很多:主要是性能。
只有反射有效。
在视图层之前,动作本身被压入值堆栈。
S2 标签(和 JSP EL 通过请求包装器)使用 OGNL 从值堆栈中检索值。 OGNL 使用反射。例如,${errorMessage}
正在使用反射从值堆栈顶部的操作中检索值。
值不是单独存在的,它们 "embedded" 在放置在值堆栈上的对象中。
您需要获取值堆栈 和 操作,迭代堆栈内容,并通过反射检索所有可公开访问的值(方法和道具)以获得堆栈 和 可访问的内容。 (我不记得堆栈内容的其余部分是否已经在操作中可用,或者以后是否添加了更多内容。这也没有考虑任何其他会修改堆栈预览的机制。)
这就是S2调试标签在视图层的作用;你可以改用它。