【问题标题】:custom tag development - attribute not working自定义标签开发 - 属性不起作用
【发布时间】:2010-08-25 15:07:01
【问题描述】:

我正在尝试编写带有属性的自定义选项卡,但我无法让标签处理程序类读取属性值。使用 <%= %> ,我可以让 objValue 工作。但是当我使用${} 时,objValue2 没有得到评估。

jsp:

<% CommitmentItem ci = (CommitmentItem) request.getAttribute("commitmentItem"); %>
<myTag:calPOP objValue="<%= ci.getSource() %>" objValue2="${commitmentItem.source}" > </myTag:calPOP>

标签处理程序:

<getters & setters here>

public int doStartTag() throws JspException {
 pc.setAttribute("objValue2", objValue);
 System.out.println("Object Value = " + objValue );
 System.out.println("Object2 Value = " + objValue2 );

控制台输出:

Object Value = Contract W23AG-23
Object2 Value = ${commitmentItem.source}

【问题讨论】:

    标签: java jsp tags


    【解决方案1】:

    如果您使用 JSP1.2 编写,则 EL 表达式不会直接由容器解释。 JSTL 标签自己处理它们。 您可以尝试记录here 的解决方案 基本上它涉及使用 ExpressionUtil.evalNotNull 方法(JSTL 库的一部分)

    另一件事可能有效,但可能会破坏其他事情:

    <%@ page isELIgnored="false" %>
    

    如果存在理解 EL 但通过 web.xml 设置禁用的 Tomcat 版本,这将只为该页面打开 EL 评估。 当然,JSTL 标记中的任何 EL 表达式随后都会抛出异常,因为 JSTL1.0 标记不接受运行时表达式。

    【讨论】:

    • coderanch 解决方案有效,但是我在使用这种方法来实现我最终想要实现的目标时遇到了另一个障碍,此处记录了 stackoverflow.com/questions/3551973/…>
    • 或者,如果您想使自定义标记文件正常工作,请将&lt;%@ tag isELIgnored="false" %&gt; 放在标记文件的顶部。
    【解决方案2】:

    您是否为 JSP 2.0 和表达式语言启用了 web.xml?如果您的 web.xml 使用的是较旧的 DTD,服务器将禁用表达式语言,因此不会扩展诸如 ${foo} 之类的表达式。

    尝试更新 web.xml 命名空间以启用 JSP 2.0

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
         version="2.4">
    
     <!-- etc -->
    
    </web-app>
    

    【讨论】:

    • 谢谢。但不幸的是,我们使用的是 jsp 1.2,而我无法控制 IT 部门升级到 jsp 2.0 :( 我使用的是 jstl,所以 c:out 标记及其 value 属性如何能够评估 ${foo}??
    • 您不必升级任何东西。如果您的应用程序服务器支持 JSP 2.0,您只需更改 web.xml 并重新部署。显然,这是不可能的(例如,这是几十个 jsp 中的一个),但 JSP 1.2 不支持 EL,除非在标准 JSTL 库中。如果你有自己的标签,也许你可以利用它。
    • 没有部署,没有 web.xml 文件。我可以将 jsp 和类文件放到某些文件夹中。我们的应用服务器多年来一直处于半途而废的状态,我发现自己花了数周时间编写 hack 以实现标准实践,因为我们公司的 IT 不愿意升级我们的服务器。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多