2010-09-17 51 views
0

我有一個自定義EL函數定義如下:爲什麼我爲自定義jsp EL函數獲取JasperException PWC:6299?

<function> 
... 
    <function-signature> 
     java.lang.String getAsText(com.test.Outerclass.InnerEnum) 
    </function-signature> 
... 
</function> 

這裏是我的課是什麼樣子:

package com.test; 
public final class Outerclass { 
    public enum InnerEnum { 
     // ommited for clarity 
    } 
} 

當我嘗試查看網頁,我得到以下異常:

org.apache.jasper.JasperException: PWC6299: The class com.test.Outerclass.InnerEnum specified in TLD for the function conversion:getAsText cannot be found: com.test.Outerclass.InnerEnum 

我的servlet容器是Jetty(7.1.6.v20100715發行版)。這包括以下罐子。

javax.servlet.jsp.jstl_1.2.0.v201004190952.jar 
javax.servlet.jsp_2.1.0.v201004190952.jar 
org.apache.taglibs.standard.glassfish_1.2.0.v201004190952.jar 
javax.el_2.1.0.v201004190952.jar 
org.apache.jasper.glassfish_2.1.0.v201007080150.jar 

我發現了一個相關的問題在這裏,然而,筆者接受的答案,沒有給出關於這個問題是如何解決的任何真正跡象。

編輯:

爲了澄清,類和枚舉在谷歌協議中定義緩衝器消息並且由protoc編譯器生成的Java代碼。生成的代碼無法更改。

+0

要避免紅鯡魚:'package'是一個無效的軟件包名稱。但是,這應該導致編譯錯誤,而不是運行時錯誤。請相應地更新您的問題。使用'mypackage','com.example'等代替'my.package'。 – BalusC 2010-09-17 18:16:07

回答

1

我現在通過使用字符串作爲參數而不是枚舉本身來解決問題。然後,我將字符串轉換爲枚舉valueOf(String)。不是我真正想要的,而是完成了工作。

2

要使標識符正常工作,InnerEnum應該是嵌套枚舉而不是內部枚舉。即添加修改器static

package com.test; 
public final class Outerclass { 
    public static enum InnerEnum { 
     // ommited for clarity 
    } 
} 

可以在外部類之外構造/使用嵌套類/枚舉。內部類/枚舉不能,至少不能直接添加額外的反射邏輯層。平均JSP EL實現沒有這個。

+0

我更新了我的問題,以反映我無法修改java類,因爲它是由協議緩衝區編譯器生成的。然而,我會投票並將其保留在我的知識庫中,因爲這很好理解。 – predhme 2010-09-17 18:59:13

相關問題