Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我会得到一个定制jspel函数的JasperException PWC:6299?_Java_Jsp - Fatal编程技术网

Java 为什么我会得到一个定制jspel函数的JasperException PWC:6299?

Java 为什么我会得到一个定制jspel函数的JasperException PWC:6299?,java,jsp,Java,Jsp,我有一个自定义EL函数,定义如下: <function> ... <function-signature> java.lang.String getAsText(com.test.Outerclass.InnerEnum) </function-signature> ... </function> 当我试图查看该页面时,出现以下异常: org.apache.jasper.JasperException: PWC6299:

我有一个自定义EL函数,定义如下:

<function>
...
   <function-signature>
      java.lang.String getAsText(com.test.Outerclass.InnerEnum)
   </function-signature>
...
</function>
当我试图查看该页面时,出现以下异常:

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
我在这里发现了一个相关的问题,然而,作者接受了一个答案,这个答案没有给出任何关于如何解决这个问题的实际指示

编辑:


为了澄清,类和枚举在GoogleProtocolBuffers消息中定义,java代码由protoc编译器生成。无法更改生成的代码。

若要使
com.test.Outerclass.InnerEnum
标识符正常工作,
InnerEnum
应该是嵌套的枚举,而不是内部枚举。即,向其添加修饰符
static

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

嵌套类/枚举可以在外部类之外构造/使用。内部类/枚举不能,至少不能直接添加额外的反射逻辑层。一般的JSP EL实现都没有这个功能。

我现在通过使用字符串作为参数而不是枚举本身来解决这个问题。然后将字符串转换为枚举值(string)。这不是我真正想要的,但却完成了任务

为避免误会:
package
是无效的包名。但是,这应该导致编译错误,而不是运行时错误。请相应地更新您的问题。使用
mypackage
com.example
等代替
my.package
。我更新了我的问题,以反映我无法修改java类,因为它是由protocol buffers编译器生成的。然而,我将投票表决这一点,并保持在我的知识库,因为这是很好的知道。
package com.test;
public final class Outerclass {
   public static enum InnerEnum {
      // ommited for clarity
   }
}