2011-09-30 6 views
0

Il s'agit probablement d'un problème de conception puis de problème de codage.Flux Web de printemps - Problème de réutilisation du sous-flux

Nous avons une interface de commande existante que nous essayons de convertir en Spring Web Flow. Pour chaque produit, nous avons quelques composants réutilisables tels que les coordonnées, les détails du contrat, les détails de la commande, les prix ...

Maintenant, nous voulons les mettre sur une seule page, mais gardez-le toujours réutilisable de sorte qu'il peut être utilisé pour produit différent.

par exemple - j'ai une page Détails de service sur lequel j'ai trois composants différents appelés:

Host Details 
    IP Details 
    Backup Details 

Chacun de ces composants doit être réutilisés dans d'autres produits, la question est de savoir comment y parvenir? Problème: Si je crée un flux secondaire appelé "Détails du service", la vue associée devra inclure les trois jsps et l'attribut de modèle du sous-flux sera un attribut composite qui devra lier toutes les valeurs ci-dessus, comme les détails de l'hôte , Détails IP, Détails de sauvegarde ....

Je ne vais jamais réutiliser la page entière, seuls les composants doivent être réutilisés sur différentes pages.

Répondre

1

Ceci n'est pas vraiment spécifique au flux Web: vous souhaitez créer des composants de vue réutilisables liés aux composants de votre modèle?

Il est vrai que dans Webflow, vous ne pouvez effectuer que la validation automatique & de validation sur un seul objet dans l'une des étendues variables, donc je suggère que vous créez un haricot pour contenir ces trois composants, par exemple. Ensuite, l'attribut 'model' dans votre flux se rapporterait à une instance de cette classe Holder.

Vous avez juste besoin de vous rappeler que si vous voulez lier un champ soumis par ex. HostDetails, votre entrée doit utiliser la notation de points pour référencer le champ (y compris « titulaire »):

<input type="text" name="holder.hostDetails.hostName"/> 

Puis, afin de réutiliser des composants dans votre couche de vue, créer une JSP qui comprend les autres composants. J'aime créer des fichiers .tag à cette fin, un fichier de balise responsable du rendu de chaque composant.

<%!-- This is the main JSP --%> 

<%!-- Include modules using tag files --%> 
<content:hostDetails details="${holder.hostDetails}" nestedPath="holder.hostDetails"/> 
<content:ipDetails details="${holder.ipDetails}" nestedPath="holder.ipDetails"/> 
<content:backupDetails details="${holder.backupDetails}" nestedPath="holder.backupDetails "/> 

je mets l'attribut « nestedPath » là pour que le fichier de balises est modulaire et réutilisable, même lorsqu'il est inclus dans les différentes pages (même sans Holder.class). Il pourrait y avoir une façon plus élégante de le faire peu ...

Je n'ai pas montré la mise en œuvre du fichier d'étiquette, mais regardez ici: http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSPTags5.html

+0

Merci, j'ai maintenant un peu d'idée comment le faire . Nous utilisons des tuiles à la place des balises jsp pour un bit réutilisable. Pensez-vous que je frapperais un mur si nous continuions à utiliser des carreaux? – V1sh

+0

L'utilisation de carreaux est très bien, vous pouvez utiliser des jsp tags et des carreaux en conjonction les uns avec les autres. J'ai tendance à utiliser des carreaux pour la composition/mise en page des vues (qui est cohérente entre les pages), et des fichiers de balises pour l'encapsulation du contenu commun. Les fichiers de balises ont l'avantage d'avoir un 'contrat' clair alors que vous devez creuser un peu plus loin pour trouver quelles entrées sont nécessaires pour rendre une tuile. –

Questions connexes