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

时间:2010-08-25 15:07:01

标签: java jsp tags

我正在尝试编写带有属性的自定义选项卡,但我无法获取标记处理程序类来读取属性值。使用<%= %>,我可以让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}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

可能有用的另一件事,但可能会打破其他事情:

<%@ page isELIgnored="false" %>

如果是Tomcat版本了解EL但通过web.xml设置禁用,则只会为此页面切换EL评估。 当然,JSTL标记中的任何EL表达式随后都会抛出异常,因为JSTL1.0标记不接受运行时表达式。