GWT + JSTL处于开发模式 - 是否可能?

时间:2011-08-15 05:47:00

标签: gwt jetty spring-roo sts-springsourcetoolsuite

我有一个GWT应用程序(由roo生成),我决定用Spring Security保护它。 Roo生成一个login.jspx页面作为安全设置的一部分,这个jspx使用了一些基本的JSTL标记库。

在开发模式下运行时,基础Jetty服务器显然不喜欢这样。使用以下Maven依赖项

    <dependency>
        <groupId>javax.servlet.jsp.jstl</groupId>
        <artifactId>jstl-api</artifactId>
        <version>1.2</version>
        <classifier/>
    </dependency>
    <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>jstl-impl</artifactId>
        <version>1.2</version>
        <classifier/>
    </dependency>

我得到了

java.lang.AbstractMethodError: javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext;

我的猜测是jstl-impl依赖项与Web容器已经提供的依赖项冲突,但当我将其范围更改为提供时,我得到:

org.apache.jasper.JasperException: /WEB-INF/views/login.jspx(22,69) The attribute prefix fn does not correspond to any imported tag library

有人让这个成功地工作了吗?

P.S。我听说有传言你可以将应用程序导出到Tomcat,它运行正常,但GWT编译可能是一个耗时的操作,所以在开发模式下工作会很棒。

1 个答案:

答案 0 :(得分:5)

显然,支持GWT开发模式的Jetty服务器已经在类路径上的某个地方使用了JSTL 1.1。如果您更改Roo默认添加的Maven依赖项

    <dependency>
        <groupId>javax.servlet.jsp.jstl</groupId>
        <artifactId>jstl-api</artifactId>
        <version>1.2</version>
        <classifier/>
    </dependency>
    <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>jstl-impl</artifactId>
        <version>1.2</version>
        <classifier/>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.1.1</version>
        <classifier/>
    </dependency>
    <dependency>
    <groupId>taglibs</groupId>
        <artifactId>standard</artifactId>
        <version>1.1.1</version>
    </dependency>

您将拥有一个有效的GWT + JSTL环境!