Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1518 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Struts et Flex

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Struts et Flex

n°1733635
Gilgamesh ​d'Uruk
Lui-même
Posté le 19-05-2008 à 12:37:06  profilanswer
 


Bonjour,  
 
j'essaye de développer une Rich Internet Application (RIA) avec à la base une partie Struts.
 
J'ai téléchargé Flex Builder (version d'essai) et je suis le tuto.  
 
 
Bon pour communiquer avec mon Struts j'ai un truc du genre :
 

       <mx:HTTPService result="handleXML(event);" fault="handleFault(event);" id="xmlRPC" resultFormat="e4x"
     url="http://localhost:8080/mpgi/xmlHttpService.jsp" useProxy="false"/>


 
où xmlHttpService.jsp est une jsp qui "fabrique" du XML.
 
Le problème c'est qu'au niveau développement, l'intermede jsp me semble inutile (et en plus sous JBuilder il fait rien qu'à me souligner toutes les balises XML parce qu'il ne les reconnait pas et c'est stressant d'avoir des "fausses erreurs" dans son projet)  
 
J'aimerai brancher le tuyau directement sur l'action .do
 
Quelqu'un a déjà fait ça ?
 
a+


---------------
Nation spatiale : la chaîne de l'Arche interstellaire.
mood
Publicité
Posté le 19-05-2008 à 12:37:06  profilanswer
 

n°1796678
Nykal
C’est vrai quoi, à la fin !
Posté le 07-10-2008 à 16:07:49  profilanswer
 

Gilgamesh d'Uruk a écrit :


Bonjour,  
 
j'essaye de développer une Rich Internet Application (RIA) avec à la base une partie Struts.
 
J'ai téléchargé Flex Builder (version d'essai) et je suis le tuto.  
 
 
Bon pour communiquer avec mon Struts j'ai un truc du genre :
 

       <mx:HTTPService result="handleXML(event);" fault="handleFault(event);" id="xmlRPC" resultFormat="e4x"
     url="http://localhost:8080/mpgi/xmlHttpService.jsp" useProxy="false"/>


 
où xmlHttpService.jsp est une jsp qui "fabrique" du XML.
 
Le problème c'est qu'au niveau développement, l'intermede jsp me semble inutile (et en plus sous JBuilder il fait rien qu'à me souligner toutes les balises XML parce qu'il ne les reconnait pas et c'est stressant d'avoir des "fausses erreurs" dans son projet)  
 
J'aimerai brancher le tuyau directement sur l'action .do
 
Quelqu'un a déjà fait ça ?
 
a+


 
C'est toujours d'actualité cette question ? J'ai un problème similaire, mais avec un autre Framework. De ce que j'ai compris, il faut se plugger direct sur l'activité Java, et ce sera la partie SWF qui remplacera plus ou moins le controleur.

n°1796727
Gilgamesh ​d'Uruk
Lui-même
Posté le 07-10-2008 à 18:33:25  profilanswer
 

Hello,

 

bon déjà ça marche très bien sans jsp :)

 

Par contre, je ne parviens pas à garder a session d'une requete à l'autre.

 

Mais bon, en tout cas

 

Côté JAVA J2EE : je crée une action struts avec un return null

 


package com.mc.mpgi.web.action;

 

import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.Action;
import java.io.*;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.FileItem;
import java.util.List;
import java.util.Iterator;
import org.apache.commons.fileupload.*;
import java.util.ResourceBundle;
import com.mc.mpgi.beans.Documents;

 


public class UploadAction extends Action {
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
                                 HttpServletResponse response) {
        System.out.println(request.getParameter("test" ));
        doProcess(request, response);
        return null;
    }

 

   protected void doProcess(HttpServletRequest req, HttpServletResponse resp) {

 

       (... fait des trucs...)
    }
}

 

Au niveau du struts-config :

 


 <action-mappings>
    <action name="loginForm" path="/UserLoginAction" scope="request" type="com.mc.mpgi.web.action.UserLoginAction">
      <forward name="success" path="/displayAction.do" />
    </action>
...
    <action path="/uploadAction" type="com.mc.mpgi.web.action.UploadAction" />
...
  </action-mappings>

 


 


Au niveau Flex, j'utilise un "squelette" MXML pour créer le HTTPService et je le lance en AS3

 

Exemple pour le login, avec une méthode POST. Dans ce cas on peut avoir une classe Form côté Struts avec les getter et les setter qui prend la réponse,

 

Exemple :

 

public class DocReqForm extends ActionForm {
    private String login = null;
    private String password= null;

 

(...getter et setter...)

 

}

 


il faut juste que les nom des variables correspondent avec les balises encloses par le <mx:request> ci dessous :

 

MXML :

   
<mx:HTTPService
 id="reqLogin"
 method="POST" useProxy="false"
 resultFormat="xml"
 result="loginHandler(event);"
        fault="resultFaultHandler(event);">
 <mx:request xmlns="">
    <login>{login}</login>
    <password>{pw}</password>
  </mx:request>
</mx:HTTPService>  

 


Actionscript 3
en admettant que mon login est dans le composant canFormLogin, dans ImputText loginTxt (même chose pour le password)

 


  private function login():void{
  login= canFormLogin.loginTxt.text;
  pw = canFormLogin.passwordTxt.text;
  trace("login:"+login+" - pw:"+pw);
  reqLogin.url=domain+"/userLoginAction.do";
  CursorManager.setBusyCursor();
  reqLogin.send();
  }

 

Toujours en Actionscript 3 on va traiter la réponse serveur dans un loginHandler. Ici on va imaginer que la class Action qui gère le login au niveau serveur (ici : UserLoginAction) me renvoie qqchose (ici : firstName, lastName, role et ssoKey) empaqueté dans du XML.

 

Et puis on lance un effet si le login est correct :

  


private function loginHandler(event:ResultEvent):void {
   CursorManager.removeBusyCursor();          
            var res:XML = new XML(event.result);
           for each ( var node:XML in res.userMpgi ) {
      var a:XMLList ;
     a = node.attribute("firstName" );if ( a.length() == 1 ) {firstName=node.@firstName;}
     a = node.attribute("lastName" );if ( a.length() == 1 ) {lastName=node.@lastName;}
      a = node.attribute("role" );if ( a.length() == 1 ) {role=node.@role;}
      a = node.attribute("ssoKey" );if ( a.length() == 1 ) {ssoKey=node.@ssoKey;}
      }
            trace("firstName :" + firstName + " lastName :" + lastName + " role: " + role + " ssoKey : " + ssoKey);

 

           //ouverture de l'appli, etat admin ou user
            if(role=='admin'){
             canFormLogin.msgLogin.text="Login admin";
           // fait des trucs

 

           }
            if(role=='user'){
             canFormLogin.msgLogin.text="Login user";
           // fait d'autres trucs            
            }
            //exemple d'action déclenchée si login correct: fading du formLogin et à l'issue ->changement d'état
            if(role=='admin'|| role=='user'){
             canFormLogin.msgLogin.text="";
             //fading du Login
             var fade:Fade = new Fade();
             fade.alphaTo = 0;
             fade.duration = 1000;
             fade.addEventListener(EffectEvent.EFFECT_END,fEndLog);
             fade.target=canFormLogin;
             fade.play();
             //stateCanDisplay=1;
             
            }else{
             canFormLogin.msgLogin.text="Fail to login";
            }
        }

  

Voila, n'hésite pas si tu as d'autre questions.

 


a+

Message cité 2 fois
Message édité par Gilgamesh d'Uruk le 07-10-2008 à 22:58:41

---------------
Nation spatiale : la chaîne de l'Arche interstellaire.
n°1796731
masklinn
í dag viðrar vel til loftárása
Posté le 07-10-2008 à 19:03:27  profilanswer
 


[:sadnoir]

Message cité 1 fois
Message édité par masklinn le 07-10-2008 à 19:03:49

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1796841
Gilgamesh ​d'Uruk
Lui-même
Posté le 07-10-2008 à 22:53:10  profilanswer
 
n°1796845
masklinn
í dag viðrar vel til loftárása
Posté le 07-10-2008 à 22:59:33  profilanswer
 


Struts ça pue [:sadnoir]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1797040
Nykal
C’est vrai quoi, à la fin !
Posté le 08-10-2008 à 11:29:47  profilanswer
 

Gilgamesh d'Uruk a écrit :

Hello,
 
bon déjà ça marche très bien sans jsp :)
 
Par contre, je ne parviens pas à garder a session d'une requete à l'autre.  
 
Mais bon, en tout cas  
 
Côté JAVA J2EE : je crée une action struts avec un return null
 
...
 
Voila, n'hésite pas si tu as d'autre questions.
 
 
a+


 
Est ce que tu as déjà essayé le mode RemoteObject plutôt que HttpService ? A priori ça permettrait de mapper directement les classes Java (Action) sur l'ActionScript ?

n°1797377
Gilgamesh ​d'Uruk
Lui-même
Posté le 08-10-2008 à 18:42:41  profilanswer
 

Nykal a écrit :


 
Est ce que tu as déjà essayé le mode RemoteObject plutôt que HttpService ? A priori ça permettrait de mapper directement les classes Java (Action) sur l'ActionScript ?


 
 
Non, désolé.  
 
Ca m'intéresserais d'ailleurs d'avoir un retour si tu te lances là dedans.
 
a+


---------------
Nation spatiale : la chaîne de l'Arche interstellaire.
n°1797378
Gilgamesh ​d'Uruk
Lui-même
Posté le 08-10-2008 à 18:44:04  profilanswer
 

masklinn a écrit :


Struts ça pue [:sadnoir]


 
 
j'ai commencé avec ça, donc j'ai pas de point de comparaison.  
 
Tu lui reproche quoi ?
 
a+


---------------
Nation spatiale : la chaîne de l'Arche interstellaire.
n°1797385
Nykal
C’est vrai quoi, à la fin !
Posté le 08-10-2008 à 18:57:32  profilanswer
 

Gilgamesh d'Uruk a écrit :


 
 
Non, désolé.  
 
Ca m'intéresserais d'ailleurs d'avoir un retour si tu te lances là dedans.
 
a+


 
A priori je vais essayer ça. Le souci c'est que tu utilises une servlet dédiée à FLEX (BlazeDS par exemple) et du coup tu perds tout ce que peut t'apporter la partie controleur et MVC de FLEX. Par contre tout ce qui est accès au données et à la conf, plutôt Spring du coup, doit marcher assez bien.

mood
Publicité
Posté le 08-10-2008 à 18:57:32  profilanswer
 

n°1797388
masklinn
í dag viðrar vel til loftárása
Posté le 08-10-2008 à 18:59:07  profilanswer
 

Gilgamesh d'Uruk a écrit :

 


j'ai commencé avec ça, donc j'ai pas de point de comparaison.

 

Tu lui reproche quoi ?

 

a+


1. Il est extrèmement verbeux

  • Au niveau de la configuration, où on se tape 3 fichiers XML différents à éditer pour chaque action globalement, à devoir faire du copier/coller d'identifiants en permanence pour pas faire d'erreurs de frappe, et où globalement le XML en question n'est pas franchement pas agréable. Utiliser XDoclet peut améliorer les choses jusqu'à un certain point, mais pas plus loin dans la mesure où xdoclet est également bien merdique (principalement dans le fait qu'il rapporte difficilement ses erreurs et joue très mal avec les annotations Java5)
  • Au niveau de l'API, il y en a de partout et c'est vraiment pas fait pour le chaining, ce qui est assez lourd
  • Au niveau des JSPs, les taglibs Struts sont horribles à tous les niveaux (verbeuses, malpratiques, mal intégrées, ...)

2. Le workflow est rigide et limité
3. La gestion et validation des données est franchement pas terrible, l'idée d'avoir des objets formulaires est très bien, mais l'implémentation et la gestion (binding & validation implicites) de ces formulaires sont horribles
4. Je l'ai déjà cité mais je le répète, les taglibs struts sont ignobles. Je comprend qu'elles sont anciennes, ont été créées à l'époque des JSP 1, avant JSP 2.x, EL ou la JSTL, mais ça reste une horreur, et avec tous les problèmes de devoir faire du copier/coller depuis les fichiers XML sus-cités si on veut pas que tout pête à cause d'une typo difficile à catcher.

 

On peut je suis sûr en trouver nombre d'autres, je considère tout le framework comme de la boue, mais ça ce sont mes plus gros problèmes avec Struts.

 

edit: et en alternatives, histoire de proposer quelque chose:

 

Si il faut rester dans du java, Stripes m'a impressionné, le framework est relativement léger, il est moderne (basé sur les annotations java5, relativement peu de configuration, assez propre), les taglibs ne sont pas plus intéressantes que celles de struts mais il a le bon goût d'en proposer très peu (uniquement pour les formulaires en fait) et il trouve les URLs en se basant sur les noms des classes d'actions, que les IDEs (IntelliJ en tout cas) arrivent à autocompléter sans avoir besoin de support spécifique. Et au moins quand ça pète la chose est claire.

 

Le binding & validation est presque aussi pourri que struts (implicite avant le déclenchement de l'action) et n'est pas externalisé (les champs font partie des ActionBeans), mais la config de validation est beaucoup plus simple et claire, plus flexible (ou en tout cas plus facile quand on a besoin d'exprimer des choses un peu compliquées) et globalement plus pratique.

 

Si tu as besoin de voir du côté de PHP, je m'y connais beaucoup moins mais j'ai eu des retours très positifs sur Symfony (voir ratibus si ça t'intéresse, j'ai également un ami à qui j'ai suggéré ça et qui m'a remercié plusieurs fois) dont la dernière release s'est pas mal inspirée de django pour certains trucs (même si ça reste largement en dessous)

 

Enfin, depuis Stripes 1.5 il est relativement facile de créer des URLs qui ressemblent vraiment à quelque chose, ce qui est très difficile à faire avec struts.

 

Si on sort de Java, Django. Basé sur Python (ce qui est déjà un avantage), simple, efficace, relativement rapide, peu de configuration, les actions sont de simples fonctions python, la gestion des formulaires est la meilleure que j'ai pu trouver pour le moment depuis newforms (simple, puissante, efficace et flexible), et il est facile de créer des modules réutilisables (apps/applications en lingo django). Après c'est un framework full-stack (on aime ou on aime pas), l'ORM n'est pas idéal quand on a besoin de faire des choses vraiment très compliquées et le langage de templating est discutable aussi bien dans son exécution que dans son implémentation, mais globalement j'ai pas encore vu de framework plus agréable à utiliser.


Message édité par masklinn le 08-10-2008 à 19:09:24

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1978852
zizouboot
Posté le 30-03-2010 à 12:52:03  profilanswer
 

Gilgamesh d'Uruk a écrit :

Toujours en Actionscript 3 on va traiter la réponse serveur dans un loginHandler. Ici on va imaginer que la class Action qui gère le login au niveau serveur (ici : UserLoginAction) me renvoie qqchose (ici : firstName, lastName, role et ssoKey) empaqueté dans du XML.


 
Salut,  
en fait j'ai suivi votre exemple mais mon problème c'est que je n'arrive pas à cerner comment le Action va renvoyer une réponse.
Si vous pouvez expliquer un peu plus.
Merci


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Struts et Flex

 

Sujets relatifs
[Struts] Validator: vérification d'un entier invalide[tomcat - struts] page introuvable après 1h
ascenseur popur combobox dans jsp avec struts[Résolu][Struts] itération pour créer des liens + identifiants
Flex : fond d'écran image jaune[Flex SDK] poid vide un peu lourd
Struts[Flex/Bison] Analyse LR(1)
[Struts]Probleme récupération de la valeur d'un html:selectIntégration d'une application flex dans une page jsp
Plus de sujets relatifs à : Struts et Flex


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR