IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Struts 1 Java Discussion :

probleme dans le chainage de deux actions


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 185
    Par défaut probleme dans le chainage de deux actions
    salut

    je suis en stage, je travaille avec Struts et hibernate et j'ai un probleme le chainage de deux actions:

    publierEnQualif qui recupere le chemin d'une version de courrier (nom du courrier+n de version.rtf)se trouvant dans un repertoire precis et le copie dans un autre sous le nom (nom du courrier.rtf) et met a jour la base de données mais si le fichier est deja publier en Qualif l'action delegue le travail a une autre publierEnQualifBis apres confirmation de l'administrateur, je vous donne le code que j'ai fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    public ActionForward publierEnQualif(ActionMapping mapping,
    			ActionForm form, HttpServletRequest request,
    			HttpServletResponse response) throws ApplicationException
    			{
     
    		ActionForward actionForward = null;
    		RechercheCourrierForm courrierForm = (RechercheCourrierForm) form;
    		CriteresRechercheCourrierDto critereCourrierDto = new CriteresRechercheCourrierDto();
    		List versionTrouve = new ArrayList();
     
    		critereCourrierDto = CourrierUtil.createCriteresCourrier(
    				critereCourrierDto, courrierForm);
     
    		UserBean ub = (UserBean) UserHelper.getUserFromRequest(request);
    		String nomCodier = ub.getSchema();
     
    		//recuperer le chemin du repertoire ou sont stockés les modeles de
    		// fusion
     
    		String nomRepertoireModelFusion = CodierService.getInstance()
    				.recupererCodierParCodeFamilleEtCodeCodier(
    						Constants.FAMILLE_PGN, Constants.PGN_RACFUS)
    				.getChaine1();
     
    		//nom des fichiers destinees pour la modification des versions
    		String source = nomRepertoireModelFusion + "\\" + nomCodier + "\\"
    				+ Constants.REP_ADMINISTRATION + "\\"
    				+ request.getParameter("nom");
    		source = source.replaceAll(Constants.MODELE_END_WITH,
    				critereCourrierDto.getVersion() + Constants.MODELE_END_WITH);
     
    		String destination = nomRepertoireModelFusion + "\\" + nomCodier + "\\"
    				+ Constants.REP_QUALIFICATION + "\\"
    				+ request.getParameter("nom");
     
    		HttpSession session = request.getSession(true);
     
    		//mettre la destination et source dans la session pour les recuperer
    		// dans l'action publierEnQualifBis
    		session.setAttribute("destinationQualif", destination);
    		session.setAttribute("sourceQualif", source);
     
    		File file = new File(destination);
    		String existe = "non";
    		PrintWriter sortieForm = response.getWriter();
    		StringBuffer buff = new StringBuffer();
    		if (file.exists()) {
    			existe = "oui";
    			request.setAttribute("existQualif", existe);
    			session.setAttribute("version", critereCourrierDto.getVersion());
     
     
     
    		}
     
    		else {
    			critereCourrierDto.setAction("notVersion");
    			CourrierService.getInstance().copierFichier(destination, source);
    			CourrierService.getInstance().updateListeVersions(
    					critereCourrierDto, true);
    		}
     
    		actionForward = this.rechercheVersions(mapping, courrierForm, request,
    				response);
    				actionForward = mapping.findForward(Constants.SUCCESS_KEY);
     
    		return actionForward;
    	}
    et l'autre action
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    public ActionForward publierEnQualifBis(ActionMapping mapping,
    			ActionForm form, HttpServletRequest request,
    			HttpServletResponse response) throws ApplicationException {
     
    		ActionForward actionForward = null;
    		RechercheCourrierForm courrierForm = (RechercheCourrierForm) form;
    		CriteresRechercheCourrierDto critereCourrierDto = new CriteresRechercheCourrierDto();
     
    		critereCourrierDto = CourrierUtil.createCriteresCourrier(
    				critereCourrierDto, courrierForm);
     
    		HttpSession session = request.getSession(true);
     
    		critereCourrierDto.setVersion(session.getAttribute("version") + "");
    		CourrierService.getInstance().copierFichier(
    				session.getAttribute("destinationQualif").toString(),
    				session.getAttribute("sourceQualif").toString());
     
    		//suppression des deux chemins de fichiers stockés dans la session plus
    		// besoin d'eux
    		session.removeAttribute("destinationQualif");
    		session.removeAttribute("sourceQualif");
     
    		critereCourrierDto.setAction(Constants.CRITERE_NOT_VERSION);
    		CourrierService.getInstance().updateListeVersions(critereCourrierDto,
    				true);
    		actionForward = this.rechercheVersions(mapping, courrierForm, request,
    				response);
    		actionForward = mapping.findForward(Constants.SUCCESS_KEY);
    		return actionForward;
     
    	}
    et le formulaire (extrait):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    	<logic:present name="existQualif">
    		<logic:equal name="existQualif" value="oui">	
     
    			<!--fonction javascript executé si le fichier est déja publié en Qualif <=> 
    				existence du fichier dans le repertoire Qualif -->	
    			<script language="Javascript">
     
    				if (confirm("<bean:message key="MSG-10001"/>")) {	
    					document.rechercheCourrierForm.action= '<html:rewrite action="publierEnQualifBis"/>';		
    					document.rechercheCourrierForm.submit();
    				}
     
    			</script>
     
    		</logic:equal>
    	</logic:present>
    ca marche mais le chef ne veut pas que la delegation soit avec javascript

    merci de me repondre c urgent

  2. #2
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Le urgent à proscrire la prochaine fois! Pour rappel c'est un forum d'entraide, personne n'est au service de personne sinon on se ferait payer!

    Donc le javascript ton chef a totalement raison c'est à éviter dans 100% des cas quand on peut faire autrement!!

    Si tu sais que ton fichier a deja été qualifier vu qu'il y a une modification en base (utilise la base de données et pas les répertoires ou sont stockés les fichiers c'est à mon humble avis beaucoup plus propre), tu n'as qu'a faire une action global publish qui regardera l'etat de ton fichier et redirigera ensuite vers la methode qu'il faut en fonction de son état soir publierEnQualif soit publierEnQualifBis .


    Ah une autre remarque la prochaine fois pense à la balise [CODE] (obtenu avec le GROS # NOIR au dessus du champs texte)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 185
    Par défaut excusez mon ignorance
    excusez moi je n'ai rien pensé de mal et merci pour ta reponse

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 185
    Par défaut
    mais mon probleme c la confirmation de l'administrateur ( confirm de javascript ) donc obligé de passer par du javascript et avoir 2 actions separé
    je ne vois pas autrement

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    En l'occurrence, tu as 2 types de sorties, donc il faudrait 2 forward différents envoyant sur 2 pages différentes (1 avec la confirmation).
    Il n'y a pas besoin de javascript...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 185
    Par défaut
    est ce que tu peu m'expliquer ton idee car je ne vois pas de confirmation sans javaScript

  7. #7
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    là où tu as ton test if ( file.exists() ), tu retourne un forward = mapping.findForward("confirmation");

    dans le fichier struts-config.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <action path="/publierEnQualif" ... >
       <forward name="confirmation" path="laPageDeConfirmation.jsp"/>
    ... les autres que tu as déjà définis ...
    </action>
    Tu comprends mieux ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 185
    Par défaut
    j'ai resolue le probleme:

    En fait moi je travaille sur une application qua une grande partie deja implemente. pour les action de cette appli elles etendent DispachAction et pour executer une requete d'un formulaire utilisant plusieurs bouton submit im passe par du javascript alors en un action moi g fait comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    function publierEnQualif(){
     
    	var radioTags = document.getElementsByName('courrier.version');
    	var laTaille = radioTags.length;
    	var valeurCoché;
     
    	for (i=0; i < laTaille; i++){
    		if (radioTags[i].checked ) {
    			valeurCoché = radioTags[i].value;
    			break;
    		}
    	}
    	//verifie que l'utilisateur a bien coché une version pour la publication en Qualif
    	if(valeurCoché == null) {
    		alert("<bean:message key="MSG-3008" />");
    	} 
     
    	else {
     
     
    		var radioTags = document.getElementsByName('courrier.version');
    		var i = 0;
    		var publierEnQualif = "non";
    		var laTaille = radioTags.length;
     
    		//le champ caché marqueurQualif a pour id le numero de version qui est la valeur du boutton radio 
    		for (i=0; i < laTaille; i++){	
    			if(document.getElementById(radioTags[i].value).value == "<bean:message key="courrier.marqueur.true" />") {
    				publierEnQualif = "oui";				
    				break;//car a l'instant t une seule version peut être publier en qualif si trouvé on sort de la boucle
    			}
    		}
     
    		//si le courrier est déjà publier en qualif il n'est republier qu'après confirmation de l'administrateur
    		if(publierEnQualif == "oui") {
    			if(confirm("<bean:message key="MSG-10001"/>")){		
    				document.rechercheCourrierForm.action= '<html:rewrite action="publierEnQualif"/>';		
    				document.rechercheCourrierForm.submit();						
    			}
    	 	}
    		else{			
    			document.rechercheCourrierForm.action= '<html:rewrite action="publierEnQualif"/>';		
    			document.rechercheCourrierForm.submit();						
    		}
    	}
    }
    si vous avez des suggestions je suis preneur.

    merci

  9. #9
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Si tu veux avoir accès à une action spécifique en cliquant sur un bouton si tu gere les langues (lookupDispatchAction) sinon le dispatchAction est très bien.

    Suffit de faire ton bouton comme cela:

    <html:submit property="[ICI FAUT MARQUER LE PARAMETER DE TON ACTION]">Ici le nom de ton action</html>


    Si tu veut que le bouton est une autre valeur que celui de ton action, alors passe de DispatchAction à LookupDispatch action et met des clés de messages défini dans ton applicationResources.

Discussions similaires

  1. deux actions dans un onclick
    Par koKoTis dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/03/2008, 17h40
  2. [Form] deux actions dans un formulaire ?
    Par FraK dans le forum Balisage (X)HTML et validation W3C
    Réponses: 21
    Dernier message: 16/07/2007, 15h11
  3. probleme dans deux fonctions
    Par gadalla dans le forum Delphi
    Réponses: 1
    Dernier message: 14/07/2007, 03h27
  4. Deux actions dans un formulaire ?
    Par Timalounet dans le forum Langage
    Réponses: 1
    Dernier message: 03/04/2007, 18h16
  5. Deux actions différentes dans un même formulaire
    Par gpsevasion dans le forum Langage
    Réponses: 3
    Dernier message: 25/01/2007, 00h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo