0

我的struts配置:

<action name="myAction" class="my.controller.MyAction">
    <result name="myPage">/myPage.jsp</result>

MyAction有方法public String getSomeValue() { ... }

myPage.jsp中,我可以轻松地将该值打印到 HTML 流中:

<s:property value="someValue" />

但是,我想将其打印到控制台:

<%

//how do I reference myActionBean
String someVal = myActionBean.getSomeValue();
System.out.println(someVal);

%>

我的问题是,我如何myActionBean在 JSP 代码块中引用动作控制器(在上面的代码中替换),就像s:property标记在其语法中消除方法的“获取”部分一样?我想myActionBean.getSomeValue()在 JSP 中使用 Java 访问,而不是在标签中进行访问。我知道这不是推荐的做事方式,但这只是为了调试。

4

2 回答 2

1

正如@DaveNewton 所建议的,我能够从上下文中访问动作类:

<%
    ActionContext context = ActionContext.getContext();

    //this will access actionClass.getFoo() just like the tag
    //<s:property value="%{foo}"/> does but outputs to HTML
    Object fooObj = context.getValueStack().findValue("foo");
    String fooStr = (String)fooObj;

    //so that we can print it to the console
    //because the tag can only output to HTML 
    //and printing to the console is the objective of the question
    System.out.println("foo = " + fooStr);
%>

ActionContext我必须在 JSP 之上导入:

<%@ page import="com.opensymphony.xwork2.ActionContext" %>

我知道有些人不喜欢我应该这样做,但这实际上正是我想做的。我很清楚自己可以做 a System.outgetFoo()但我想在 JSP 中做。

于 2016-12-21T21:47:57.053 回答
0

您可以像在拦截器中那样从动作调用中获取动作bean,也可以从已经推送它的值堆栈中获取动作bean。由于您可以从 JSP 访问值堆栈,并且知道如何打印属性,这是您将操作 bean 设置为带有<s:set>标记的请求属性的最简单方法。

<s:set var="action" value="action" scope="request"/> 

现在你可以得到action bean

<% 
  MyAction myActionBean = request.getAttribute("action");
  String someVal = myActionBean.getSomeValue();
  System.out.println(someVal);
%>
于 2016-12-21T21:25:16.047 回答