我有一个 JSP 页面,其中包含我实例化对象的脚本。我想将该对象传递给 JSP 标记而不使用任何缓存。
例如我想做到这一点:
<%@ taglib prefix="wf" uri="JspCustomTag" %>
<%
Object myObject = new Object();
%>
<wf:my-tag obj=myObject />
我试图避免直接与任何缓存(页面、会话、servletcontext)交互,我宁愿让我的标签处理它。
我在这里寻找的一个稍微不同的问题:“如何将对象传递给标记文件?”
答:使用属性指令的“类型”属性:
<%@ attribute name="field"
required="true"
type="com.mycompany.MyClass" %>
该类型默认为 java.lang.String,因此如果没有它,如果您尝试访问对象字段说它无法从 String 类型中找到该字段,则会收到错误消息。
<jsp:useBean id="myObject" class="java.lang.Object" scope="page" />
<wf:my-tag obj="${myObject}" />
不鼓励在 JSP 页面中使用 Scriptlets。它扼杀了模板语言的目的。
对我来说,表达式语言只有在我使该变量可访问时才有效,例如将其放在页面上下文中。
<% Object myObject = new Object();
pageContext.setAttribute("myObject", myObject);
%>
<wf:my-tag obj="${myObject}" />
否则 tas 收到 null。
并且<wf:my-tag obj="<%= myObject %>" />
无需额外的努力即可工作。<%=%> 还提供 jsp 编译时类型验证,而 El 仅在运行时验证。
您可以使用 "<%= %>" 直接在标签中获取对象值:
<wf:my-tag obj="<%= myObject %>"/>
并获取该对象中任何变量的值,您可以使用“obj.parameter”获得该值,例如:
<wf:my-tag obj="<%= myObject.variableName %>"/>
使用表达语言:
<wf:my-tag obj="${myObject}" />