Sto cercando un nuovo framework di frontend per il portale JSF della nostra azienda e sto considerando Angular2. Voglio migrare gradualmente componenti specifici nella pagina da JSF a Angular2/REST. Non voglio utilizzare Angular2 per il routing, almeno non ancora, e non voglio che Angular si occupi completamente della pagina: alcuni componenti avranno ancora bisogno di essere JSF per il prossimo futuro.Integrare Angular2 nel progetto JSF esistente
Idealmente, vorrei avvolgere il contenuto del corpo del mio modello JSF con il mio componente radice angolare e proiettare l'HTML reso da JSF nel componente root, in modo che JSF funzioni come prima e qualsiasi componente Angolare all'interno del modello vengono raccolti e tutti possono comunicare. Es .:
<h:body>
<my-app>
<h:panelGroup styleClass="languageSwitcher">
<h:form>
<h:selectOneMenu value="#{languageHandler.language}" onchange="submit()">
<f:selectItem itemValue="en" itemLabel="English" />
<f:selectItem itemValue="nl" itemLabel="Dutch" />
</h:selectOneMenu>
</h:form>
</h:panelGroup>
<my-angular-component data-source="/rest/mydata"></my-angular-component>
</my-app>
<h:body>
Con angolare 1, userei inclusione per fare questo lavoro. Tuttavia, a quanto ho capito, Angular 2 content projection does not work on the root component, poiché l'HTML reso non è considerato una vista compilata angolare.
Ho anche considerato l'utilizzo del componente root templateURL
per ottenere la pagina di rendering JSF in modo dinamico, ma è difficile da implementare e non funziona bene con i numerosi POST di JSF.
L'unico modo in cui posso pensare di far funzionare questo è quello di creare un componente radice di ciascun componente Angolare che sostituisce un bit di JSF e in ogni pagina esegue il bootstrap di tutti i componenti che utilizzo. Lo svantaggio qui è che ho bisogno di un sacco di codice boilerplate per eseguire il bootstrap di ogni componente angolare che costruisco, e non hanno un componente root condiviso, quindi la comunicazione tra loro è limitata. Inoltre, avrò bisogno di configurare ciascun componente angolare attraverso gli attributi, ma in quanto questi aren't picked up automatically either avrò bisogno di aggiungere codice personalizzato per ogni componente a raccoglierli:
class MyAngularComponent {
constructor(public elementRef: ElementRef) {
this.dataSourceUrl = this.elementRef.nativeElement.getAttribute("data-source");
}
}
Poi, quando ho finalmente sostituire l'intero frontend con Angolare, devo refactoring ogni componente di nuovo per utilizzare @Input
invece di recuperare informazioni dagli attributi manualmente.
Qualcuno conosce un modo migliore per farlo? O semplicemente JSF e Angular2 non si combinano bene?
* "O semplicemente JSF e Angular2 non si combinano bene?" * Se ciò fosse vero, http://angularfaces.com non sarebbe mai esistito. – BalusC
Angularfaces AFAIK utilizza AngularJS (noto anche come Angular 1), che supporta la transizione, semplificando notevolmente il processo. –
Se Angular 1 si adatta alle tue esigenze, perché stai utilizzando 2? – JMK