2010-08-25 57 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