31

我有一个 JSP 页面,其中包含我实例化对象的脚本。我想将该对象传递给 JSP 标记而不使用任何缓存。

例如我想做到这一点:

<%@ taglib prefix="wf" uri="JspCustomTag" %>

<% 
 Object myObject = new Object();
%>

<wf:my-tag obj=myObject />

我试图避免直接与任何缓存(页面、会话、servletcontext)交互,我宁愿让我的标签处理它。

4

6 回答 6

43

我在这里寻找的一个稍微不同的问题:“如何将对象传递给标记文件?”

答:使用属性指令的“类型”属性:

<%@ attribute name="field" 
              required="true"
              type="com.mycompany.MyClass" %>

该类型默认为 java.lang.String,因此如果没有它,如果您尝试访问对象字段说它无法从 String 类型中找到该字段,则会收到错误消息。

于 2009-08-04T15:02:55.040 回答
11
<jsp:useBean id="myObject" class="java.lang.Object" scope="page" />
<wf:my-tag obj="${myObject}" />

不鼓励在 JSP 页面中使用 Scriptlets。它扼杀了模板语言的目的。

于 2008-12-10T06:28:54.770 回答
5

最初的语法是重用 '<%= %>'

所以

<wf:my-tag obj="<%= myObject %>" />

有关示例,请参阅Sun 标记库教程的这一部分

于 2008-09-16T19:09:44.453 回答
3

对我来说,表达式语言只有在我使该变量可访问时才有效,例如将其放在页面上下文中。

<%  Object myObject = new Object();
    pageContext.setAttribute("myObject", myObject);
%>
<wf:my-tag obj="${myObject}" />

否则 tas 收到 null。

并且<wf:my-tag obj="<%= myObject %>" />无需额外的努力即可工作。<%=%> 还提供 jsp 编译时类型验证,而 El 仅在运行时验证。

于 2008-09-16T19:48:18.807 回答
1

您可以使用 "<%= %>" 直接在标签中获取对象值:

    <wf:my-tag obj="<%= myObject %>"/>

并获取该对象中任何变量的值,您可以使用“obj.parameter”获得该值,例如:

<wf:my-tag obj="<%= myObject.variableName %>"/>
于 2014-12-10T08:46:42.863 回答
0

使用表达语言:

    <wf:my-tag obj="${myObject}" />
于 2008-09-16T19:01:27.453 回答