【问题标题】:How can I pass an object to a JSP tag?如何将对象传递给 JSP 标记?
【发布时间】:2010-09-09 16:35:00
【问题描述】:

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

例如我想完成这个:

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

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

<wf:my-tag obj=myObject />

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

【问题讨论】:

  • 注意,我不希望我的对象转换为字符串并作为字符串传递,我希望我的标签处理程序实际上可以访问该对象。
  • 您是否介意选择正确的答案?
  • @RubensMariuzzo 都不好。
  • @peterh,嗯,他们并不都那么坏。

标签: java jsp jsp-tags el


【解决方案1】:

使用表达语言:

【讨论】:

  • 我们需要在某些上下文中添加它,然后再使用它。
  • 先序列化myObject,再反序列化。非常糟糕的解决方案。
【解决方案2】:

原来的语法是重用''

所以

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

请参阅this part of the Sun Tag Library Tutorial 了解示例

【讨论】:

  • 链接已损坏。请参阅 Web 存档版本 here
  • 先序列化myObject,再反序列化。非常糟糕的解决方案。
  • 遇到了类似的问题,解决了。没有得到序列化和反序列化的问题,因为它是透明的——不需要对标签处理程序做任何事情。
【解决方案3】:

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

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

否则 tas 收到 null。

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

【讨论】:

  • 它先序列化myObject,然后反序列化。非常糟糕的解决方案。
【解决方案4】:
<jsp:useBean id="myObject" class="java.lang.Object" scope="page" />
<wf:my-tag obj="${myObject}" />

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

【讨论】:

  • 首先,分页作用域是一个非常糟糕的东西。第二:它首先序列化myObject,然后反序列化。这个解决方案作为一个简单的 scriptlet 要糟糕得多。
  • 1. page 作用域 bean 有什么问题? 2. 这里没有序列化。你为什么这么认为?
  • 我终于明白你有权利,所以你有赏金。
【解决方案5】:

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

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

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

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

【讨论】:

  • 不是这个问题,-1。
【解决方案6】:

您可以使用“”直接在您的标签中获取对象值:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 2015-06-29
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多