如何将对象传递给JSP标记?

时间:2008-09-16 18:46:07

标签: java jsp jsp-tags el

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

例如,我想完成这个:

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

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

<wf:my-tag obj=myObject />

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

6 个答案:

答案 0 :(得分:37)

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

答案:使用属性指令的“type”属性:

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

类型defaults to java.lang.String,如果没有它,如果您尝试访问对象字段,说它无法从String类型中找到该字段,则会出现错误。

答案 1 :(得分:11)

<jsp:useBean id="myObject" class="java.lang.Object" scope="page" />
<wf:my-tag obj="${myObject}" />

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

答案 2 :(得分:5)

原始语法是重复使用'&lt;%=%&gt;'

所以

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

请参阅this part of the Sun Tag Library Tutorial以获取示例

答案 3 :(得分:3)

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

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

否则tas会收到null。

<wf:my-tag obj="<%= myObject %>" />无需额外努力即可使用。另外&lt;%=%&gt;提供jsp编译时类型验证,而El仅在运行时验证。

答案 4 :(得分:1)

您可以使用“&lt;%=%&gt;”直接在标记中获取对象值:

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

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

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

答案 5 :(得分:0)

使用表达语言:

    <wf:my-tag obj="${myObject}" />