Quali sono i principi di sviluppo di applicazioni web con framework Java di azione-based?

StackOverflow https://stackoverflow.com/questions/2852481

  •  27-09-2019
  •  | 
  •  

Domanda

Sfondo

ho intenzione di sviluppare una nuova applicazione web con Java. Non è molto grande o molto complesso e non ho abbastanza tempo fino a quando non sarà "ufficialmente" start.

Ho qualche JSF / Facelets sfondo sviluppo (circa un anno e mezzo). E ho anche un po 'di expirience con JSP + JSTL.

Allo scopo di auto-educativo (e anche al fine di trovare la soluzione migliore) Voglio prototipo del nuovo progetto con uno dei quadri di azione-based. In realtà, io scegliere tra Spring MVC e strisce.

problema

Al fine di ottenere il corretto impressione circa quadri d'azione a base di (in confronto con JSF) Voglio essere sicuro che io li uso in modo corretto (in un più grande o, in misura minore).

Quindi, qui elencare alcuni compiti più frequenti-(almeno per me) e descrivere come li ho risolto con JSF. Voglio sapere come devono essere risolti con quadro d'azione-based (o separatamente con Spring MVC e strisce se non v'è alcuna differenza per l'attività concreta).

  1. Rendering contenuti : posso applicare componente pronto per l'uso da librerie standard di JSF (core e html) o da librerie terze parti (come RichFaces). Posso combinare i componenti semplici e posso facilmente creare i miei propri componenti che si basano su componenti standard.
  2. Rendering dati (tipi primitivi o di riferimento) nel formato corretto : Ogni componente permettono di specificare un convertitore per trasformare i dati in entrambe le direzioni (per il rendering e di inviare al server). Converter è, come di consueto, una semplice classe con 2 piccoli metodi.
  3. Navigazione del sito : a specificare una serie di navigazione-casi in faces-config.xml. Poi ho specificato action-attributo di un collegamento (o un pulsante), che dovrebbe corrispondere a uno o più dei casi di navigazione. Il migliore corrispondenza viene scelto da JSF.
  4. il flusso di esecuzione (maghi multiformi per esempio) : sto usando JSF 1.2 in modo da utilizzare Apache Orchestra per il flusso (conversazione) portata.
  5. l'elaborazione dei moduli : Ho un java-bean piuttosto standard (supporto di fagioli in termini JSF) con un certo margine. I 'map' campi modulo in questa proprietà del bean. Se tutto va bene (non si smentisce mai e validazione viene passato) poi tutto queste proprietà sono impostate con i valori dei campi del modulo. Poi posso chiamare un metodo (specificato in azione l'attributo del pulsante) per eseguire qualche stringa logica e di ritorno che deve gran parte uno dei miei casi di navigazione per accedere alla schermata successiva.
  6. Forme di convalida : posso creare validatore personalizzato (o scegliere tra esistente) e aggiungerlo al quasi ogni componente. librerie di terze parti hanno insiemi di personalizzati Ajax-validatori. validatori standard funzionano solo dopo pagina è presentata. A dire il vero, non mi piace come la validazione in JSF funziona. Troppa magia lì. Molti componenti standard (o forse tutti) già predefiniti convalida ed è impossibile per disattivarlo (forse non sempre, ma ho incontrato molti problemi con esso).
  7. il supporto Ajax : molte librerie terze parti (MyFaces, ICEfaces, OpenFaces, AnotherPrefixFaces ...) hanno un forte supporto AJAX e funziona abbastanza bene. Fino ad incontrare un problema. Troppo c'è magia. E 'molto difficile per farlo funzionare, se non funziona, ma hai fatto bene come è descritto nel manuale.
  8. URL user-friendly : la gente dice che ci sono alcune librerie per che esistono. E può essere fatto con filtri pure. Ma non ho mai provato. Sembra troppo complex per il primo sguardo.

Grazie in anticipo per spiegare come questi elementi (o alcuni di essi) può essere fatto con quadro d'azione-based.

È stato utile?

Soluzione

Farò del mio meglio per rispondere per quanto riguarda Stripes . Ho usato Struts e JSF in passato, ma non di recente, così al meglio ho nozioni e sentimenti su di loro vaghi.

Siamo intimamente familiare w / Stripes, lo usano per la maggior parte tutto ora, e davvero godere. E 'facile da saltare in, supporta molti degli scenari complicati, ma si è anche liberi di lavorare al di fuori di esso, che è molto importante quando si vuole costruire i propri widget Ajax o parlare con un altro sistema o qualcosa del genere.

Se si va il percorso strisce, I sicuramente raccomandare l'acquisto o il download il libro . Si tratta di uno sportello unico per tutto il necessario per Stripes, ed è praticamente l'unica documentazione per Stripersist (caratteristica davvero bello, ma NO documenti web).


Rendering contenuto: posso applicare componente pronto per l'uso da librerie standard di JSF (core e html) o da librerie terze parti (come RichFaces). Posso combinare i componenti semplici e posso facilmente creare i miei propri componenti che si basano su componenti standard.

Questo è simile. Nucleo, Html, Fmt, ecc, nonché eventuali tag personalizzati si trovano, inc. visualizzare: tag, tag pacchetto, e creare il proprio. Tuttavia, ovviamente, non si affronta a livello di componente ora, avete a che fare con un tag che determina ciò che è sulla pagina / inviati da o verso il server.

Rendering di dati (tipi primitivi o di riferimento) nel formato corretto: Ogni componente permette di specificare un convertitore per trasformare i dati in entrambe le direzioni (per il rendering e di inviare al server). Converter è, come di consueto, una semplice classe con 2 piccoli metodi.

Stripes ha molti costruita nei convertitori, ed è facile creare convertitori personalizzati per i tipi di dati più complessi. strutture di dati supporti Stripes molto complessi per essere mappati con poca fatica. In combinazione con Stripersist , per esempio, posso mettere il mio oggetto del modello direttamente sul ActionBean , ha messo alcuni dei campi del modulo, e Stripersist sarà idratare il modello dal db (in base alla sua PK) e aggiornamento che con i campi ho messo sulla forma -. tutto prima di rilasciare il controllo a me sul ActionBean

Navigazione del sito: a specificare una serie di navigazione-cases in faces-config.xml. Poi ho specificato action-attributo di un collegamento (o un pulsante), che dovrebbe corrispondere a uno o più dei casi di navigazione. Il migliore corrispondenza viene scelto da JSF.

Navigazione a strisce si basa su quello che è il nome dei ActionBeans, inizialmente. Non v'è alcun xml. Inoltre, gli URL sono un annotazioni a livello ActionBean a strisce 1.5, in modo da poter fare le cose come @UrlBinding("/{$event}/{model}") dove /view/5 vuoi prendere al gestore di eventi "view" per l'oggetto Modello con l'ID / PK 5.

il flusso di esecuzione (maghi multiformi per esempio):. Sto utilizzando JSF 1.2 in modo da uso di Apache Orchestra per l'ambito di flusso (conversazione)

Mentre io sono solo vagamente familiare con il concetto di scope conversazione, Stripes ha Creazione guidata Maschera funzionalità , ma non l'ho usato e sono in grado di espandere il proprio su questo. Penso che sia una simile idea però.

l'elaborazione dei moduli: Ho un java-bean piuttosto standard (supporto di fagioli in termini JSF) con un certo margine. I 'map' campi modulo in questa proprietà del bean. Se tutto va bene (non si smentisce mai e validazione viene passato) poi tutto queste proprietà sono impostate con i valori dei campi del modulo. Allora posso chiamare un metodo (specificato nell'attributo azione del pulsante) per eseguire una stringa logica e ritorno che molto dovrebbeuno dei miei casi di navigazione per passare alla schermata successiva.

Non drasticamente diverso. Invece di componenti sul fagiolo [azione], ora avete tipi Java o personalizzati. ActionBeans sono creati per ogni richiesta e gettati via, a meno che non si fa qualcosa di simile a metterlo in sessione, o un mago, o qualsiasi altra cosa. Questo è bello, perché tutte le variabili di istanza vengono mappati i dati dalla forma, lo si utilizza, poi buttarlo via, e non hanno a che fare con eventuali problemi di sincronizzazione come Struts fatto. Dopo aver fatto la vostra passione con i dati, Stripes consente di inviare un ForwardResolution (stato OK), Redirect, Streaming (JSON, di file, ecc). Il modello reindirizzamento-dopo-POST viene attuata bene con l'idea di portata istantanea (3/4 in basso nella pagina).

convalida Forms: posso creare validatore personalizzato (o scegliere tra esistente) e aggiungerlo al quasi ogni componente. librerie di terze parti hanno insiemi di personalizzati Ajax-validatori. validatori standard funzionano solo dopo pagina è presentata. A dire il vero, non mi piace come la validazione in JSF funziona. Troppa magia lì. Molti componenti standard (o forse tutti) già predefiniti convalida ed è impossibile per disattivarlo (forse non sempre, ma ho incontrato molti problemi con esso).

Stripes permette convalida nelle annotazioni sulle variabili di istanza sul ActionBean. Permettono alcuni valori di default, necessaria, maxlength, ecc oppure si può sempre creare il proprio. L'impostazione predefinita è facile aggiungere e flessibile, mentre c'è sempre la possibilità di fare qualcosa di completamente personalizzato.

il supporto Ajax: molte librerie terze parti (MyFaces, ICEfaces, OpenFaces, AnotherPrefixFaces ...) hanno un forte sostegno ajax e funziona abbastanza bene. Fino ad incontrare un problema. Troppo c'è magia. E 'molto difficile per farlo funzionare, se non funziona, ma hai fatto bene come è descritto nel manuale.

Questo è stato il mio grande problema con il modo di fare le cose JSF. Anche se avete fatto ottenere il widget di destra, sei ancora bloccato con quel widget. Con Strisce, è possibile utilizzare qualsiasi più recente e più Jquery ha da offrire, e finché si invia il GET o POST destra al server, strisce sa cosa fare con esso e in grado di inviare facilmente JSON indietro. Credo che i quadri dei componenti si adattano una nicchia di qualche anno fa molto meglio quando AJAX stata dura, ma JQ rende così facile ora.

URL user-friendly: la gente dice che ci sono alcune librerie per che esistono. E può essere fatto con i filtri pure. Ma non ho mai provato. Sembra troppo complesso per il primo sguardo.

@UrlBinding , è facile quanto quello.

Altri suggerimenti

La mia risposta non è quella che si desidera ascoltare: Non accendere dal framework di componenti per quadro d'azione

sono passato il contrario dopo molti anni di azioni di sviluppo quadro e sto mai tornare indietro.

Degli 8 casi d'uso che hai citato, solo uno viene in mente dove i quadri di azione sono ovviamente meglio, e questo è il design URL / URL amichevole. Si può fare in quadri di componenti pure, ma molto più facile in quadri di azione (in particolare nel Stripes dove basta annotare il vostro ActionBean con l'URL).

Vi consiglio di provare wicket, è molto facile da imparare (molto più facile che JSF) e ti permette di riutilizzare molti componenti esistenti.

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