2010-03-02 12 views
5

estoy construyendo un proyecto GWT, con GWT-2.0.3 y el complemento eclipse. así, en primer lugar he intentado, JSTL1.2 y el servlet 2.5,¿Cómo usar JSTL en un proyecto de GWT?

  • i no se añade jstl-1.2.jar a la guerra/WEB-INF/lib
  • en web.xml, que utilizo:

    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
        id="WebApp_ID" version="2.5"> 
    
  • en la página JSP, utilizo:

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
    
    <c:forEach var="app" items="${requestScope.apps}"> 
        <tr><td width=20%><c:out value="${app.mapping}"></c:out></td> 
        <td width=40%><c:out value="${app.description}"></c:out></td> 
        ... 
    

Si rem Sobre la etiqueta foreach, funciona bien. pero si uso las etiquetas básicas, me sale el siguiente excepción:

HTTP ERROR: 500 

javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext; 
RequestURI=/system/view/register.html 

Caused by: 

java.lang.AbstractMethodError: javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext; 
    at javax.servlet.jsp.jstl.core.LoopTagSupport.unExposeVariables(LoopTagSupport.java:587) 
    at javax.servlet.jsp.jstl.core.LoopTagSupport.doFinally(LoopTagSupport.java:323) 
    at org.apache.jsp.system.view_jsp._jspx_meth_c_forEach_0(view_jsp.java:267) 
    at org.apache.jsp.system.view_jsp._jspx_meth_a_body_0(view_jsp.java:186) 
    at org.apache.jsp.system.view_jsp._jspService(view_jsp.java:98) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) 
    at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:285) 
    at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126) 
    at org.app4j.test.DispatchServlet.doGet(DispatchServlet.java:133) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.Server.handle(Server.java:324) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:829) 
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:513) 
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) 
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) 
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488) 
Powered by Jetty:// 

Si puedo implementar el proyecto para Tomcat 6, que funciona bien. busco en la web y encuentro un artículo, "JSP Expression Language in GWT’s embedded Jetty", así que probé jstl-1.1 y servlet2.4, pero sigo recibiendo esa excepción.
me parece que la versión del servidor Jetty de GWT debería ser 6.1, pero no estoy seguro, si eso es cierto, debería ser compatible con EE5, ¿alguien ha integrado GWT y JSTL? ¡por favor ayuda! Gracias.

+1

Esta solución funcionó para mí: http://stackoverflow.com/questions/7062024/gwt-jstl-in-development-mode-is-it -posible – Taylor

Respuesta

2

Recomiendo simplemente cambiar a un servidor Java externo (como Tomcat, que parece haber instalado y que funciona con su configuración) - mucho menos problemas, más fácil que tratar de trabajar con el embarcadero lisiado que viene con GWT .

Las instrucciones se pueden encontrar en el docs. Si se queda con GWT's Jetty, solo se encontrará con más problemas en el futuro.


actualización, ver comentario de Pascal Thivent a continuación:

@Pascal: lo siento por eso, yo no quiero decir simplemente "Cambiar a un servidor externo, sin hablar", es sólo que He visto mucha gente en SO y en GWT's Google Group que tienen problemas para configurar Jetty que viene con GWT, en algunos casos es porque la configuración es algo diferente a la estándar, porque el equipo de GWT incluía una versión anterior/modificada (no puedo obtener alguna información sólida sobre esta versión de Jetty, por ejemplo, ver this post y comentarios allí, algunas citas:

NOTA: Creo que la versión de amarre enviado con GWT es inferior a 6.1.12 y lo tanto, debe dejar fuera de la primera parámetro en los documentos de ejemplo, ya que se añadió en el embarcadero 6.1.12rc3. Consulte la nota en la parte superior de la página de documentos Jetty .


Supuestamente embarcadero apoya el servlet 2,5 especificación y de recursos de inyección a través de la entrada web.xml o anotación @Resource. Sin embargo, todavía tengo para averiguar si esto es compatible con por la versión de Jetty enviada con GWT. Si alguien ha averiguado si no funciona y si es así cómo está hecho por favor hágamelo saber.

Se producen otros problemas cuando alguien quiere usar EJB.

Todo eso (quizás de una manera más condensada/críptica) está escrito en la documentación de GWT, para lo cual proporcioné un enlace arriba al párrafo exacto que trata este tema.
Afortunadamente, eso despejó algunas cosas: cambiar a un servidor externo simplemente parece la solución más fácil, simple y mejor, sin configuración de "GWT especial", lo que significa que puede usar la misma configuración/servidor que usará en producción , no hay necesidad de migrar la configuración de, por ejemplo, Tomcat, no hay errores inesperados después de la migración, etc.

+0

muchas gracias, pensé que no podría usar el modo alojado si cambio a tomcat. – Brodie

+1

Sin enlaces a problemas específicos, ningún problema particular mencionado, ninguna referencia, nada. Lo único que veo en esta respuesta es FUD, –

+0

Tienes razón, he editado mi respuesta para aclarar esto, con suerte es menos FUD y más hasta el estándar habitual (alto) en SO :) –

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

ruta de clases de tiempo de ejecución de la aplicación web es probable desordenada con una versión diferente del archivo JAR EL (ya sea una versión anterior o la de un servidor de aplicaciones diferente) que carece de la excepción en el método mencionado. Sospecho que el /WEB-INF/lib. Deshágase de él, normalmente ya lo proporciona el servidor de aplicaciones en cuestión, no necesita incluirlo en su aplicación web. Esto se aplica en todas las bibliotecas del servidor de aplicaciones como servlet-api.jar y consortes por cierto. Nunca debe copiarlo en la aplicación web /WEB-INF/lib. Eso es pedir problemas de portabilidad.

2

Me tropecé con esto mientras estaba buscando arreglar JSTL para mi proyecto de motor de aplicación. Encontré la respuesta en la página "Will It Play" de google. Al parecer hay que añadir

<%@page isElIgnored="false" %>

a las páginas JSP para que EL análisis.

1

Me sale este error también.

He encontrado que puedo solucionarlo moviendo el SDK de GWT a la parte inferior de la ruta de clase en la ruta de compilación de Eclipse Java -> Ordenar y exportar.

Sin embargo, que rompe GWT serialización con este mensaje:

Mar 3, 2011 3:31:23 PM sun.reflect.NativeMethodAccessorImpl invoke0 
WARNING: Exception while dispatching incoming RPC call 
com.google.gwt.user.client.rpc.SerializationException: java.lang.reflect.InvocationTargetException 
    at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeWithCustomSerializer(ServerSerializationStreamWriter.java:764) 
    at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:727) 

es posible solucionarlo moviendo la biblioteca GWT copia de seguridad de la ruta de clases, lo que lo hace aparecer como usted puede tener JSTL o GWT serialización de trabajo en Embarcadero, pero no ambos.

(GWT 2.1, JSTL1.2 y el servlet 2.5.)

Cuestiones relacionadas