2010-08-25 65 views
0

我想写一个自定义选项卡的属性,但我不能让标签处理程序类读取属性值。使用<%= %>,我可以得到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

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

可能的工作,但将有可能打破其他事情的另一件事:

<%@ page isELIgnored="false" %> 

如果是有一个理解EL但通过web.xml设置禁用的Tomcat版本的情况,这将仅在此页面上切换EL评估。 当然,JSTL标签中的任何EL表达式都会随后抛出异常,因为JSTL1.0标签不接受运行时表达式。

+0

coderanch解决方案的工作,但我碰到了使用th的另一个障碍是我最终试图实现的目标,这里记录了here jeff 2010-08-26 18:45:29

+0

或者如果您试图获得自定义标记文件,请在标记顶部放置<%@ tag isELIgnored =“false”%>“文件。 – undefined 2013-04-18 00:32:16

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> 
+0

谢谢。但不幸的是,我们正在使用jsp 1.2,并且我无法控制将IT deptment升级到jsp 2.0 :(我使用jstl,那么c:out标记和它的值属性可以如何评估为$ {foo}? – jeff 2010-08-25 16:31:17

+0

您不需要如果您的应用服务器支持JSP 2.0,您只需更改您的web.xml并重新部署即可,显然这可能是不可能的(例如,这是一个jsp),但JSP 1.2不支持EL在标准的JSTL库中,如果你有自己的标签,也许你可以使用它 – locka 2010-08-25 18:23:12

+0

没有部署,没有web.xml文件,我可以把jsp和class文件放到某些文件夹中我们的应用服务器已经被半因为我们公司的IT不愿意升级我们的服务器,所以我发现自己花了几周的时间写黑客来达到标准的做法。谢谢 – jeff 2010-08-25 19:25:31