2012-07-01 15 views
45

hice un plugin de RCP con embarcadero incrustado como siguiente:Eclipse RCP Plugin + incrustado embarcadero + JSF

1) En plugin.xml -> Dependencias, he añadido el siguiente:

org.eclipse.equinox.http.jetty 
org.eclipse.equinox.http.registry 
org.mortbay.jetty.server 
javax.servlet 

2) En plugin.xml -> Extensiones, he añadido un punto de extensión Servlet (org.eclipse.equinox.http.registry.servlet)

class: TemperatureServlet 
alias:/temperature 

El Te mperatureServlet se ve así:

import java.io.IOException; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class TemperatureServlet extends HttpServlet { 

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
      throws ServletException, IOException { 

     System.out.println("doGet Called"); 

     resp.sendRedirect("Convertor.jsp"); 
    } 
} 

El archivo Convertor.jsp se ve así:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%> 
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 
<f:view> 
<h:form> 
     <h:panelGrid columns="2"> 
      <h:outputLabel value="Celsius"></h:outputLabel> 
      <h:inputText value="#{temperatureConvertor.celsius}"></h:inputText> 
     </h:panelGrid> 
     <h:commandButton action="#{temperatureConvertor.celsiusToFahrenheit}" value="Calculate"></h:commandButton> 
     <h:commandButton action="#{temperatureConvertor.reset}" value="Reset"></h:commandButton> 
     <h:messages layout="table"></h:messages> 
    </h:form> 


    <h:panelGroup rendered="#{temperatureConvertor.initial!=true}"> 
    <h3> Result </h3> 
    <h:outputLabel value="Fahrenheit "></h:outputLabel> 
    <h:outputLabel value="#{temperatureConvertor.fahrenheit}"></h:outputLabel> 
    </h:panelGroup> 
</f:view> 
</body> 
</html> 

El archivo faces-config.xml contiene:

<?xml version="1.0" encoding="UTF-8"?> 

<faces-config 
xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" 
    version="2.0"> 
    <managed-bean> 
     <managed-bean-name>temperatureConvertor</managed-bean-name> 
     <managed-bean-class>hellojsf.TemperatureConvertor</managed-bean-class> 
     <managed-bean-scope>session</managed-bean-scope> 
    </managed-bean> 

</faces-config> 

Mi plugin tiene la siguiente jerarquía:

plugin-name 
---src 
------class package 
---------Activator.java 
---------Application.java 
---------ApplicationActionBarAdvisor.java 
---------ApplicationWorkbenchWindowAdvisor.java 
---------Perspective.java 
---------TemperatureConvertor.java 
---------TemperatureServlet.java 
---META-INF 
------MANIFEST.MF 
---resources 
-------WebContent 
----------WEB-INF 
-------------faces-config.xml 
-------------web.xml 
----------Convertor.jsp 
---plugin.xml 

En Activador clase, método empezar(), he comenzado el servidor web como esta:

public void start(BundleContext context) throws Exception { 
     super.start(context); 
     plugin = this; 

     Bundle bundle = Platform.getBundle("org.eclipse.equinox.http.registry"); 
     if (bundle.getState() == Bundle.RESOLVED) { 
      bundle.start(Bundle.START_TRANSIENT); 
     } 

     Dictionary settings = new Hashtable(); 
     settings.put("http.enabled", Boolean.TRUE); 
     settings.put("http.port", 8080); 
     settings.put("http.host", "0.0.0.0"); 
     settings.put("https.enabled", Boolean.FALSE); 
     settings.put("context.path", "/"); 
     settings.put("context.sessioninactiveinterval", 1800); 

     try { 
      JettyConfigurator.startServer(PLUGIN_ID + ".jetty", settings); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

Para este plugin He añadido también las siguientes bibliotecas:

  • JSTL: javax.servlet.jsp.jstl-1.2.1-javadoc.jar; javax.servlet.jsp.jstl-api-1.2.1-javadoc.jar
  • JSF 2.0 (Apache MyFaces JSF Core-2,0 API 2.0.2)

Después de iniciar la aplicación, si escribo en mi navegador localhost: 8080/temperatura

No sabe dónde encontrar Convertor.jsp. Mi pregunta es: ¿cómo puedo configurar este complemento para conocer la ubicación del recurso WebContent y lo más importante, cómo puedo configurar el complemento para saber cómo procesar JSF y conocer las faces-config.xml y web.xml.

¿Puedo, por ejemplo, cuando defino la extensión org.eclipse.equinox.http.registry.servlets, hago algo como esto? clase: javax.faces.webapp.FacesServlet alis: /*.jsp

(todos los archivos * .jsp para ser procesado por el FacesServlet)?

Muchas gracias y lo siento si las preguntas son tontas, pero soy nuevo en esta área de complementos de RCP, Jetty y JSF.

+3

Supongo que ya has resuelto este problema o no estarías haciendo nuevas preguntas sobre JSF y todas esas cosas . Además, si usa JSF 2, entonces debería pasar a Facelets. Te recomendaré que leas [¿Cuáles son las diferencias entre JSP y Facelets?] (Http://stackoverflow.com/a/2197189/1065197), [¿Cuál es la diferencia entre JSF, Servlet y JSP?] (Http: //stackoverflow.com/a/2097732/1065197) y los enlaces allí. No lo tomes ya que estoy en tu contra, en cambio no tengo la respuesta exacta para tu pregunta, solo estoy ofreciendo orientación para un mejor camino. –

+0

Además, si tiene la respuesta a alguna de sus preguntas, puede responderlas (y aceptarlas) para ayudar a otras personas en esta orientación. –

+0

¡Muchas gracias por su consejo! Lo adivinó bien. Resolví el problema, pero no tuve tiempo de escribir una respuesta adecuada para ello. Pero pronto regresaré con la respuesta. – wallE

Respuesta

1

Eche un vistazo a setting a context in jetty. Puede definirlo antes de iniciar su servidor.

public class OneWebApp 
{ 
    public static void main(String[] args) throws Exception 
    { 
     String jetty_home = System.getProperty("jetty.home",".."); 

     Server server = new Server(8080); 

     WebAppContext webapp = new WebAppContext(); 
     webapp.setContextPath("/"); 
     webapp.setWar(jetty_home+"/webapps/test.war"); 
     server.setHandler(webapp); 

     server.start(); 
     server.join(); 
    } 
} 
1

Una clase JSP Extension Factory en org.eclipse.equinox.jsp.jasper.registro proporciona compatibilidad con JSP para su uso junto con el punto de extensión de servlets.

JSPFactory se puede utilizar junto con org.eclipse.equinox.http.registry y el punto de extensión Servlets para permitir el uso de JSP declarativamente con el registro de extensión.

JSPFactory aceptará un parámetro de "ruta" correspondiente a la ruta base en el paquete para buscar recursos JSP. Este parámetro se puede configurar utilizando el enfoque de separador ":" o mediante el parámetro xml.

p. Ej. class = "org.eclipse.equinox.jsp.jasper.registry.JSPFactory:/A/PATH" o

Cuestiones relacionadas