Domanda

Sto costruendo un piccolo sito web in Java (Spring MVC con visualizzazioni JSP) e sto cercando di trovare la soluzione migliore per creare e includere alcuni moduli riutilizzabili (come "ultime notizie" "prossimi eventi"...).

Quindi la domanda è:Portlet, riquadri o qualche altra tecnologia?

È stato utile?

Soluzione

Se utilizzi Spring MVC, ti consiglio di utilizzare Portlet.In Spring, i portlet sono solo controller leggeri poiché sono responsabili solo di un frammento dell'intera pagina e sono molto facili da scrivere.Se utilizzi Spring 2.5, puoi usufruire di tutti i vantaggi del nuovo supporto per le annotazioni e si adattano perfettamente all'intera applicazione Spring con l'inserimento delle dipendenze e gli altri vantaggi derivanti dall'utilizzo di Spring.

Un controller portlet è praticamente uguale a un controller servlet, ecco un semplice esempio:

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

Qui, un NewsService verrà automaticamente inserito nel controller.Il metodo view aggiunge un oggetto List al modello, che sarà disponibile come ${newsList} nel JSP.Spring cercherà una vista denominata news.jsp in base al valore restituito dal metodo.RequestMapping indica a Spring che questo controller è per la modalità VIEW del portlet.

La configurazione XML deve solo specificare dove si trovano la vista e i controller:

<!-- 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 desideri semplicemente incorporare i portlet nell'applicazione esistente, puoi raggruppare un contenitore portlet, ad esempio eXo, Sole, O Apache.Se desideri creare la tua applicazione come un insieme di portlet, potresti prendere in considerazione una soluzione portlal completa, come Portale Liferay.

Altri suggerimenti

Le piastrelle possono essere una seccatura.Notevole miglioramento rispetto a quanto precedente (ad es.nulla), ma piuttosto limitante.

Portello potrebbe essere più quello che stai cercando, a meno che tu non abbia optato per JSP.

Non consiglio di utilizzare i portlet a meno che la tua applicazione non sia veramente un file portale web.

Se vuoi solo "componenti riutilizzabili", usa File di tag JSP, sono estremamente semplici ma estremamente potenti, poiché sono uguali ai normali JSP.

Ho avuto esperienza nell'uso delle tessere e la complessità coinvolta semplicemente non ne vale la pena.

Sono un grande fan di GWT.Ti consente di scrivere i tuoi componenti come normali classi Java e quindi puoi inserirli nelle tue pagine a tuo piacimento.Il tutto finisce per essere compilato in Javascript.

Ecco un esempio:

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

Ho avuto molta esperienza con i portlet insieme ad Ajax JSF (IceFaces) e Liferay Portal e non li consiglierei a nessuno: tutto sembra a posto leggendo il tutorial e un vero inferno nella pratica.Ovviamente penso che siano molto più convenienti e leggeri con Spring MVC e JSP, ma comunque, i portlet non sono una tecnologia ben supportata, secondo me.

Non sono sicuro al 100% di cosa significhi "componenti riutilizzabili" in questo contesto, ma se intendi che desideri che determinati elementi comuni appaiano su ogni pagina, come banner, piè di pagina, collegamenti di navigazione, ecc., allora non cercare oltre SiteMesh.Il mio team lo ha utilizzato con successo su un paio di applicazioni web internazionalizzate.

Arazzo è un framework per app Web Java con particolare attenzione alla creazione semplice di componenti riutilizzabili.

Ho utilizzato sitemesh ed è utile per racchiudere una serie di pagine in intestazioni e piè di pagina standard, ma Tapestry è migliore per creare componenti che vengono utilizzati su molte pagine, possibilmente più volte per pagina.I componenti Tapestry possono accettare altri componenti come parametri, il che consente il rivestimento in stile Sitemesh.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top