代码之家  ›  专栏  ›  技术社区  ›  jeff

自定义标记开发-属性不工作

  •  0
  • jeff  · 技术社区  · 14 年前

    我正在尝试编写一个带有属性的自定义选项卡,但我无法让标记处理程序类读取属性值。使用一个 <%= %> ,我可以让objvalue工作。但是 objValue2 使用时不进行评估 ${} .

    JSP:

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

    Tag Handler:

    <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}
    
    2 回复  |  直到 14 年前
        1
  •  0
  •   evnafets    14 年前

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

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

    <%@ page isELIgnored="false" %>
    

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

        2
  •  0
  •   locka    14 年前

    是否为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>