GWT + JSTL в режиме разработки - возможно ли это? - PullRequest
3 голосов
/ 15 августа 2011

У меня есть приложение 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 конфликтует с зависимостью, уже предоставленной веб-контейнером, но когда я изменяю ее область на предоставленную, я получаю:

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 Ответ

5 голосов
/ 17 августа 2011

Очевидно, что сервер Jetty, лежащий в основе режима разработки GWT, уже содержит JSTL 1.1 в пути к классам. Если вы измените зависимости Maven, которые Roo добавляет по умолчанию

    <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!

...