我有一个JSP页面,其中包含一个scriplet,我在其中实例化一个对象。我想将该对象传递给JSP标记而不使用任何缓存。
例如,我想完成这个:
<%@ taglib prefix="wf" uri="JspCustomTag" %>
<%
Object myObject = new Object();
%>
<wf:my-tag obj=myObject />
我试图避免直接与任何缓存(页面,会话,servletcontext)进行交互,我宁愿让我的标记处理。
答案 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 %>" />
答案 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}" />