2008-09-16 17 views

Respuesta

4

Si está utilizando Spring MVC, entonces yo recomendaría el uso de portlets. En Spring, los portlets son controladores livianos, ya que solo son responsables de un fragmento de toda la página y son muy fáciles de escribir. Si está utilizando Spring 2.5, puede disfrutar de todos los beneficios del nuevo soporte de anotación, y se ajustan muy bien en toda la aplicación de Spring con la inyección de dependencia y los otros beneficios de usar Spring.

Un controlador portlet es más o menos lo mismo que un controlador servlet, aquí es un ejemplo simple:

@RequestMapping("VIEW") 
@Controller 
public class NewsPortlet { 

    private NewsService newsService; 

    @Autowired 
    public NewsPortlet(NewsService newsService) { 
     this.newsService = newsService; 
    } 

    @RequestMapping(method = RequestMethod.GET) 
    public String view(Model model) { 
     model.addAttribute(newsService.getLatests(10)); 
     return "news";   
    } 
} 

Aquí, un NewsService se inyecta automáticamente en el controlador. El método view agrega un objeto List al modelo, que estará disponible como $ {newsList} en el JSP. Spring buscará una vista llamada news.jsp basada en el valor de retorno del método. RequestMapping le dice a Spring que este controlador es para el modo VIEW del portlet.

La configuración XML sólo tiene que especificar el lugar de la vista y los controladores se encuentran:

<!-- look for controllers and services here --> 
<context:component-scan base-package="com.example.news"/> 

<!-- look for views here --> 
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value="/WEB-INF/jsp/news/"/> 
    <property name="suffix" value=".jsp"/> 
</bean> 

Si desea incrustar sólo los módulos de función en su aplicación existente, la puede agrupar un contenedor de portlets, como eXo , Sun o Apache. Si desea construir su aplicación como un conjunto de portlets, es posible que desee considerar una solución portlal completa, como Liferay Portal.

+0

Gracias por su útil respuesta, ¿tiene alguna experiencia con Spring portlets MVC? Algunos tutoriales, guías? Tal vez puede recomendar un servidor de portal? – moriarty

+0

Desarrollarlos es mi trabajo principal, así que tengo mucha experiencia. Aunque no hay mucha documentación específica en línea. Puede llegar bastante lejos siguiendo la documentación de Spring MVC ya que el marco de trabajo de Porlet es casi idéntico. Liferay es un buen portal, pero podría ser más de lo que necesita. – pjesi

2

Las baldosas pueden ser un problema. Gran mejora sobre lo que vino antes (es decir, nada), pero bastante limitado.

Wicket podría ser más de lo que está buscando, a menos que se haya decidido por JSP.

+0

¿Puedes comentar por qué "Las baldosas pueden ser un dolor"? –

0

Tapestry es un marco de aplicación web Java con énfasis en la creación de componentes reutilizables.

He utilizado sitemesh, y es bueno para envolver un conjunto de páginas en encabezados y pies de página estándar, pero Tapestry es mejor para crear componentes que se usan en muchas páginas, posiblemente muchas veces por página. Los componentes de tapiz pueden tomar otros componentes como parámetros, lo que permite el ajuste del estilo de Sitemesh.

+0

Hm, Tapiz parece prometedor ... tienen buenas grabaciones de pantalla ... http://tapestry.apache.org/tapestry5/screencast.html a comprobarlo, thnx mucho. – moriarty

1

Soy un gran fan de GWT. Le permite escribir sus componentes como clases normales de Java y luego puede insertarlos en sus páginas a voluntad. Todo termina siendo compilado a Javascript.

He aquí un ejemplo:

public class MyApplication implements EntryPoint, HistoryListener 
{ 
    static final String INIT_STATE = "status"; 

    /** 
    * This is the entry point method. Instantiates the home page. 
    */ 
    public void onModuleLoad() 
    { 
     RootPanel.get().setStyleName ("root"); 
     initHistorySupport(); 
    } 

    private void initHistorySupport() 
    { 
     History.addHistoryListener (this); 

     // check to see if there are any tokens passed at startup via the browser’s URI 
     String token = History.getToken(); 
     if (token.length() == 0) 
     { 
      onHistoryChanged (INIT_STATE); 
     } 
     else 
     { 
      onHistoryChanged (token); 
     } 
    } 


    /** 
    * Fired when the user clicks the browser's 'back' or 'forward' buttons. 
    * 
    * @param historyToken the token representing the current history state 
    */ 
    public void onHistoryChanged (String historyToken) 
    { 
     RootPanel.get().clear(); 
     Page page; 
     if (Page1.TOKEN.equalsIgnoreCase (historyToken)) 
     { 
      page = new Page1(); 
     } 
     else if (Page2.TOKEN.equalsIgnoreCase (historyToken)) 
     { 
      page = new Page2(); 
     } 
     else if (Page3.TOKEN.equalsIgnoreCase (historyToken)) 
     { 
      page = new Page3(); 
     } 
     RootPanel.get().add (page); 
    } 
} 
0

No estoy 100% seguro de qué significan "componentes reutilizables" en este contexto, pero si quiere decir que quiere que aparezcan ciertos elementos comunes en cada página, como pancarta, pie de página, enlaces de navegación, etc. no busque más allá de SiteMesh. Mi equipo lo ha utilizado con éxito en un par de aplicaciones web internacionalizadas.

2

No recomiendo usar Portlets a menos que su aplicación sea verdaderamente una web portal.

Si solo quiere "componentes reutilizables" use JSP tagfiles, son simples pero extremadamente potentes, ya que son los mismos que los JSP comunes.

He tenido experiencia en el uso de teselas y la complejidad involucrada simplemente no vale la pena.

1

Tenía mucha experiencia con portlets junto con Ajax JSF (IceFaces) y Liferay Portal y no se lo recomendaría a nadie: todo se ve bien cuando se lee un tutorial y es un verdadero infierno en la práctica. Por supuesto, creo que son mucho más convenientes y livianas con Spring MVC y JSP, pero de todos modos, los portlets no cuentan con la tecnología adecuada.

Cuestiones relacionadas