Quels sont les principes de développement d'applications web avec des cadres de Java action?

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

  •  27-09-2019
  •  | 
  •  

Question

Historique

Je vais développer une nouvelle application Web avec Java. Ce n'est pas très grand ou très complexe et j'ai assez de temps jusqu'à ce qu'il va « officiellement » commencer.

J'ai une certaine expérience de développement JSF / Facelets (environ une demi-année). Et j'ai aussi quelques expirience avec JSP + JSTL.

En effet auto-éducation (et aussi pour trouver la meilleure solution) Je veux un prototype du nouveau projet avec l'un des cadres axés sur l'action. En fait, je vais choisir entre Spring MVC et rayures.

Problème

Afin d'obtenir l'impression correcte sur les cadres axés sur l'action (par rapport à JSF) Je veux être sûr que je les utilise correctement (dans une plus grande ou dans une moindre mesure).

Alors, voici la liste des tâches que je les plus fréquents (au moins pour moi) et décrire la façon dont je les résous avec JSF. Je veux savoir comment ils devraient être résolus avec le cadre basé sur l'action (ou séparément avec Spring MVC and Stripes s'il y a une différence pour la tâche de béton).

  1. contenu rendu : Je peux appliquer le composant prêt à utiliser des bibliothèques JSF standards (de base et html) ou libs 3e partie (comme RichFaces). Je peux combiner des composants simples et je peux facilement créer mes propres composants qui sont basés sur des composants standards.
  2. données de rendu (primitives ou types référence) dans le format correct : Chaque composant permet de spécifier un navigation-cas faces-config.xml. Puis-je spécifier l'action attribut d'un lien (ou un bouton) qui doit correspondre à un ou plusieurs des cas de navigation. Le meilleur match est choisi par JSF.
  3. flux d'exécution (des assistants multiformes par exemple) : J'utilise JSF 1.2, donc je l'utilise Apache Orchestra pour le flux (la conversation) portée.
  4. Formulaire de traitement : J'ai un joli java-haricot standard (backing bean en termes JSF) avec une certaine marge. Je forme « carte » des champs sur ces propriétés de haricots. Si tout se passe bien (pas d'exception et de validation est passé), toutes ces propriétés sont définies avec les valeurs des champs de formulaire. Ensuite, je peux appeler une méthode (spécifiée dans le bouton de Action attribut) pour exécuter une chaîne logique et le retour qui devrait bien un de mes cas de navigation pour accéder à l'écran suivant.
  5. Validation Forms : Je peux créer validateur personnalisé (ou choisir existant) et l'ajouter à presque chaque composant. bibliothèques 3 parties ont des ensembles de ajax-validateurs personnalisés. validateurs standard fonctionnent seulement après page est soumis. En fait, je ne suis pas comme la façon dont fonctionne la validation dans JSF. magie trop là. De nombreux composants standards (ou peut-être tous) ont validation prédéfini et il est impossible de le désactiver (peut-être pas toujours, mais j'ai rencontré beaucoup de problèmes avec elle).
  6. Support Ajax : de nombreuses bibliothèques 3ème partie (MyFaces, Icefaces, OpenFaces, AnotherPrefixFaces ...) ont un fort soutien ajax et cela fonctionne assez bien. Jusqu'à ce que vous rencontrer un problème. magie trop là aussi. Il est très difficile de le faire fonctionner si elle ne fonctionne pas, mais vous avez bien fait tel qu'il est décrit dans le manuel.
  7. URL conviviales : les gens disent qu'il ya des bibliothèques pour qui existent. Et il peut être fait avec des filtres ainsi. Mais je ne l'ai jamais essayé. Il semble trop complex pour le premier coup d'oeil.

Merci d'avance pour expliquer comment ces éléments (ou certains d'entre eux) peut être fait avec le cadre axé sur l'action.

Était-ce utile?

La solution

Je ferai de mon mieux pour répondre au sujet de Stripes . Je l'ai utilisé Struts et JSF dans le passé, mais pas récemment, donc au mieux que j'avoir des notions et des sentiments vagues à leur sujet.

Nous sommes intimement familiers w / Stripes, utilisez-le pour la plupart tout maintenant, et vraiment en profiter. Il est facile de sauter dans, prend en charge la plupart des scénarios complexes, mais vous êtes également libre de travailler à l'extérieur de celui-ci, ce qui est vraiment important quand vous voulez construire vos propres widgets ajax ou parler à un autre système ou quelque chose.

Si vous allez la route rayures, I certainement recommander l'achat ou le téléchargement livre. Il est un guichet unique pour tout ce que vous avez besoin pour Stripes, et est pratiquement la seule documentation pour Stripersist (fonctionnalité vraiment sympa, mais pas de documents Web).


contenu de rendu: Je peux appliquer le composant prêt à utiliser des bibliothèques JSF standards (de base et html) ou libs 3e partie (comme RichFaces). Je peux combiner des composants simples et je peux facilement créer mes propres composants qui sont basés sur des composants standards.

Ceci est similaire. Base, Html, Fmt, etc., ainsi que des balises personnalisées vous trouver, inc. afficher: tag, étiquette pack, et créez votre propre. Cependant, il est évident que vous ne traitez pas au niveau des composants maintenant, vous traitez avec une étiquette qui détermine ce qui est sur la page / ou envoyé à partir du serveur.

données de rendu (primitives ou types référence) dans le format correct: Chaque composant permet de spécifier un convertisseur pour transformer les données dans les deux sens (à rendre et à envoyer au serveur). Converter est, comme d'habitude, une classe simple avec 2 petites méthodes.

Stripes a beaucoup construit dans les convertisseurs, et il est facile de créer des convertisseurs personnalisés pour vos types de données plus complexes. Bandes supports structures de données très complexes à cartographier avec peu de tracas. Combiné avec Stripersist , par exemple, je peux mettre mon objet modèle directement sur le ActionBean , a mis quelques-unes des champs sur la forme, et Stripersist hydrate le modèle de la db (basé sur son PK) et mise à jour avec les champs que je mets sur la forme -. tout avant de relâcher le contrôle de moi sur le ActionBean

Navigation du site: je précise un ensemble de navigation-cas dans les faces-config.xml. Puis-je spécifier l'action attribut d'un lien (ou un bouton) qui doit correspondre à un ou plusieurs des cas de navigation. Le meilleur match est choisi par JSF.

Navigation en bandes est basé sur ce que vous nommez les ActionBeans, au départ. Il n'y a pas xml. En outre, jolies urls sont un annotation au niveau ActionBean dans Stripes 1.5, vous pouvez faire des choses comme @UrlBinding("/{$event}/{model}")/view/5 prendriez-vous au gestionnaire d'événement « view » pour votre modèle objet avec l'ID / PK 5.

flux d'exécution (des assistants multiformes par exemple). J'utilise JSF 1.2, donc j'utilise Apache Orchestra pour le champ flux (la conversation)

Alors que je ne suis vaguement familier avec le concept de champ de conversation, Stripes a Assistant Formulaire fonctionnalité , mais je l'ai pas utilisé et je suis incapable de développer vraiment sur ce point. Je pense qu'il est une idée similaire, quoique.

Traitement formulaire: J'ai un java-haricot assez standard (backing bean en termes JSF) avec une certaine marge. Je forme « carte » des champs sur ces propriétés de haricots. Si tout se passe bien (pas d'exception et de validation est passé), toutes ces propriétés sont définies avec les valeurs des champs de formulaire. Ensuite, je peux appeler une méthode (spécifiée dans l'attribut d'action de bouton) pour exécuter une chaîne logique et retour qui doit beaucoupun de mes cas de navigation pour accéder à l'écran suivant.

Pas radicalement différent. Au lieu de composants sur votre [action] haricot, vous avez maintenant Java ou types personnalisés. ActionBeans sont créés par demande et jetés, à moins que vous fassiez quelque chose comme mis en session, ou assistant, ou autre chose. C'est agréable, parce que toutes les variables d'instance se mappés sur les données de la forme, vous l'utilisez, puis le jeter, et ne pas faire face à des problèmes de synchronisation comme entretoises fait. Une fois que vous faites votre truc avec les données, Stripes vous permet d'envoyer un ForwardResolution (état OK), Redirect, ou en streaming (JSON, fichier, etc.). Le modèle Redirect-après-POST est mis en œuvre bien avec l'idée de champ flash (3/4 en bas de la page).

Validation des formulaires: Je peux créer validateur personnalisé (ou choisir existant) et l'ajouter à presque chaque composant. bibliothèques 3 parties ont des ensembles de ajax-validateurs personnalisés. validateurs standard fonctionnent seulement après page est soumis. En fait, je ne suis pas comme la façon dont fonctionne la validation dans JSF. magie trop là. De nombreux composants standards (ou peut-être tous) ont validation prédéfini et il est impossible de le désactiver (peut-être pas toujours, mais j'ai rencontré beaucoup de problèmes avec elle).

Stripes permet de valider dans les annotations sur les variables d'instance sur l'ActionBean. Ils permettent à certains paramètres par défaut, nécessaire, maxlength, etc., ou vous pouvez toujours créer votre propre. La valeur par défaut est facile d'ajouter et flexible, alors qu'il ya toujours la possibilité de faire quelque chose de complètement personnalisé.

Support Ajax: de nombreuses bibliothèques 3e partie (MyFaces, Icefaces, OpenFaces, AnotherPrefixFaces ...) ont un fort soutien ajax et cela fonctionne assez bien. Jusqu'à ce que vous rencontrer un problème. magie trop là aussi. Il est très difficile de le faire fonctionner si elle ne fonctionne pas, mais vous avez bien fait tel qu'il est décrit dans le manuel.

Ce fut mon gros problème avec la façon dont JSF de faire les choses. Même si vous avez reçu le droit de widget, vous êtes toujours bloqué avec ce widget. Avec Stripes, vous pouvez utiliser ce que le dernier et le plus grand Jquery a à offrir, et aussi longtemps que vous envoyez le droit GET ou POST au serveur, bandes sait quoi faire avec elle et peut facilement renvoyer JSON. Je pense que les cadres composants intègrent un créneau il y a beaucoup mieux quand AJAX était quelques années difficiles, mais JQ rend si facile maintenant.

URL conviviales: les gens disent qu'il ya des bibliothèques pour qui existent. Et il peut être fait avec des filtres aussi bien. Mais je ne l'ai jamais essayé. Il semble trop complexe pour le premier regard.

@UrlBinding , il est aussi facile que cela.

Autres conseils

Ma réponse est pas celui que vous voulez entendre: Ne pas passer du Cadre de composants pour cadre d'action

Je marche dans l'autre sens après de nombreuses années de développement d'un cadre d'action et je ne vais jamais revenir.

Sur les 8 cas d'utilisation que vous avez mentionné, un seul vient à l'esprit où les cadres d'action sont évidemment mieux, et qui est la conception URL / URL conviviales. Il peut se faire dans les cadres des composants aussi bien, mais beaucoup plus facile dans les cadres d'action (en particulier dans les bandes où vous simplement votre ActionBean annoté est avec l'URL).

Je vous conseille d'essayer guichet, il est très facile d'apprendre (beaucoup plus facile que JSF) et nous allons vous réutiliser plusieurs composants existants ainsi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top