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