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

时间:2020-03-05 18:56:49  来源:igfitidea点击:

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

例如,我想完成此任务:

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

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

<wf:my-tag obj=myObject />

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

解决方案

回答

使用表达语言:

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

回答

原始语法是重用'<%=%>'

所以

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

有关示例,请参见《 Sun Tag Library教程》的这一部分。

回答

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

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

否则,tas接收到空值。

而<wf:my-tag obj =" <%= myObject%>" />`无需额外的工作。同样,<%=%>给出jsp编译时类型验证,而El仅在运行时验证。

回答

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

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

回答

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

答:使用属性指令的"类型"属性:

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

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