Pergunta

Estou construindo um pequeno site em Java (Spring MVC com visualizações JSP) e estou tentando encontrar a melhor solução para criar e incluir alguns módulos reutilizáveis ​​(como "últimas notícias", "próximos eventos"...).

Então a questão é:Portlets, blocos ou alguma outra tecnologia?

Foi útil?

Solução

Se você estiver usando Spring MVC, eu recomendaria usar Portlets.No Spring, os portlets são apenas controladores leves, pois são responsáveis ​​apenas por um fragmento da página inteira e são muito fáceis de escrever.Se você estiver usando o Spring 2.5, poderá aproveitar todos os benefícios do novo suporte de anotação, e eles se encaixam perfeitamente em todo o aplicativo Spring com injeção de dependência e outros benefícios do uso do Spring.

Um controlador de portlet é praticamente igual a um controlador de servlet. Aqui está um exemplo simples:

@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";        
    }
}

Aqui, um NewsService será automaticamente injetado no controlador.O método view adiciona um objeto List ao modelo, que estará disponível como ${newsList} no JSP.O Spring procurará uma visualização chamada news.jsp com base no valor de retorno do método.O RequestMapping informa ao Spring que este controlador é para o modo VIEW do portlet.

A configuração XML só precisa especificar onde a visualização e os controladores estão localizados:

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

Se desejar simplesmente incorporar os portlets em seu aplicativo existente, você poderá agrupar um contêiner de portlet, como eXo, Sol, ou Apache.Se você deseja construir seu aplicativo como um conjunto de portlets, você pode querer considerar uma solução portlal completa, como Portal Liferay.

Outras dicas

Os azulejos podem ser uma dor.Grande melhoria em relação ao que veio antes (ou seja,nada), mas sim limitante.

Postigo pode ser mais o que você está procurando, a menos que você tenha optado por JSP.

Eu não recomendo usar Portlets, a menos que seu aplicativo seja realmente um portal da internet.

Se você deseja apenas "componentes reutilizáveis", use Arquivos de tags JSP, eles são extremamente simples, mas extremamente poderosos, pois são iguais aos JSPs normais.

Já tive experiência no uso de blocos e a complexidade envolvida simplesmente não vale a pena.

Eu sou um grande fã de GWT.Ele permite que você escreva seus componentes como classes Java normais e então você pode inseri-los em suas páginas à vontade.A coisa toda acaba sendo compilada em Javascript.

Aqui está um exemplo:

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);
    }
}

Tive muita experiência com portlets em conjunto com Ajax JSF (IceFaces) e Liferay Portal e não os recomendaria a ninguém - tudo parece bom na leitura do tutorial e um verdadeiro inferno na prática.É claro que acho que eles são muito mais convenientes e leves com Spring MVC e JSP, mas, de qualquer forma, os portlets não são uma tecnologia bem suportada.

Não tenho 100% de certeza do que significa "componentes reutilizáveis" neste contexto, mas se você quer que certos elementos comuns apareçam em todas as páginas, como banner, rodapé, links de navegação, etc., não procure mais. SiteMesh.Minha equipe o usou com sucesso em alguns aplicativos da web internacionalizados.

Tapeçaria é uma estrutura de aplicativo da web Java com ênfase na criação fácil de componentes reutilizáveis.

Eu usei o sitemesh e é bom para agrupar um conjunto de páginas em cabeçalhos e rodapés padrão, mas o Tapestry é melhor para criar componentes que são usados ​​em muitas páginas, possivelmente muitas vezes por página.Os componentes Tapestry podem receber outros componentes como parâmetros, o que permite o encapsulamento no estilo Sitemesh.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top