访问 JSP Java scriptlet 中的控制器方法而不是使用标签?
Access to controller methods in JSP Java scriptlet rather than using tags?
我的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);
%>
我的问题是,如何在 JSP 代码块中引用动作控制器(替换上面代码中的 myActionBean
),就像 s:property
标签在其消除方法的 "get" 部分的语法?我想在 JSP 中访问 Java 中的 myActionBean.getSomeValue()
而不是在标签中进行访问。我知道这不是推荐的做事方式,但这只是为了调试。
您可以像在拦截器中那样从操作调用中获取操作 bean,或者从已经推送的值堆栈中获取操作 bean。因为您可以从 JSP 访问值堆栈并且知道如何打印 属性 最简单的方法,您可以使用 <s:set>
标记将操作 bean 设置为请求属性。
<s:set var="action" value="action" scope="request"/>
现在可以获取动作bean了
<%
MyAction myActionBean = request.getAttribute("action");
String someVal = myActionBean.getSomeValue();
System.out.println(someVal);
%>
根据@DaveNewton 的建议,我能够从上下文中访问操作 class:
<%
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);
%>
我不得不在 JSP 之上导入 ActionContext
:
<%@ page import="com.opensymphony.xwork2.ActionContext" %>
我知道有些人不喜欢我应该这样做,但这实际上正是我想做的。我很清楚我可以在 getFoo()
中做一个 System.out
但我想在 JSP.
中做
我的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);
%>
我的问题是,如何在 JSP 代码块中引用动作控制器(替换上面代码中的 myActionBean
),就像 s:property
标签在其消除方法的 "get" 部分的语法?我想在 JSP 中访问 Java 中的 myActionBean.getSomeValue()
而不是在标签中进行访问。我知道这不是推荐的做事方式,但这只是为了调试。
您可以像在拦截器中那样从操作调用中获取操作 bean,或者从已经推送的值堆栈中获取操作 bean。因为您可以从 JSP 访问值堆栈并且知道如何打印 属性 最简单的方法,您可以使用 <s:set>
标记将操作 bean 设置为请求属性。
<s:set var="action" value="action" scope="request"/>
现在可以获取动作bean了
<%
MyAction myActionBean = request.getAttribute("action");
String someVal = myActionBean.getSomeValue();
System.out.println(someVal);
%>
根据@DaveNewton 的建议,我能够从上下文中访问操作 class:
<%
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);
%>
我不得不在 JSP 之上导入 ActionContext
:
<%@ page import="com.opensymphony.xwork2.ActionContext" %>
我知道有些人不喜欢我应该这样做,但这实际上正是我想做的。我很清楚我可以在 getFoo()
中做一个 System.out
但我想在 JSP.