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

JSF Java Discussion :

forcer l'utilisation de la méthode POST <h:form..


Sujet :

JSF Java

  1. #1
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut forcer l'utilisation de la méthode POST <h:form..
    Salut,

    Je veux forcer la method dans l'objet HttpServletRequest à "POST" au lieu de "GET"
    NB:pas d'attribut method dans la balise <h:form>

    merci

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2008
    Messages : 79
    Par défaut
    Si mes souvenirs sont bons, je crois que toutes données envoyées du client au serveur via l'attribut <h:form> se fait forcément en POST.

  3. #3
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut
    dans mon managedBean j'ai testé ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    HttpServletRequest request = (HttpServletRequest) context
    			.getExternalContext().getRequest();
    System.out.println(request.getMethod());
    j'ai récupérer GET

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2008
    Messages : 79
    Par défaut
    Mais dans ta balise <h:form> tu as des balise du genre <h:input> ? Tu peux nous fournir ta page JSF s'il te plait.

  5. #5
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut
    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
     
    <h:form id="campaign"  >
     
     
    					<ice:panelGroup
    						style="background-color: #F9F6F6;width:815px;border: 1px solid #D9D9D9;text-align: left ">
    						<ice:panelGrid columns="2" cellspacing="3">
    							<ice:panelGrid columns="2" cellspacing="3" style="width:500px">
    								<span><ice:outputLabel value="Nom"
    									style="font:14px Arial ;color: #000000" /><span
    									style="color: red">*</span></span>
    								<ice:selectInputText id="AutoCmpTxtFace"
    									rows="#{salesBean.selectedLength}" width="300"
    									value="#{salesBean.selectedAccountValue}"
    									valueChangeListener="#{salesBean.selectInputValueChanged}"
    									listVar="acc"
    									listValue="#{salesBean.accountMatchPossibilities}">
    									<f:facet name="selectInputText">
    										<ice:panelGrid columns="3"
    											columnClasses="cityCol,stateCol,zipCol">
    											<ice:outputText id="AutoCmpCty" value="#{acc.name}" />
     
    											<ice:outputText id="AutoCmpCty" value="#{acc.category}" />
     
    										</ice:panelGrid>
    									</f:facet>
     
    								</ice:selectInputText>
     
     
    							</ice:panelGrid>
     
     
    <ice:panelGrid columns="3" visible="#{productBean.popVisible}">
    							<ice:commandButton value="Confirmer" 
    								action="#{salesBean.generateDevisPDF}" style="width: 100px" />
    							<ice:commandButton value="Annuler"
    								onclick="javascript:show_alert();" style="width: 100px" />
    						</ice:panelGrid>
    </h:form>
    C'est un peut compliqué mais de toute façon ce n'est autre qu'un formulaire JSF simple avec des inputs et un bouton pour générer un PDF

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2008
    Messages : 79
    Par défaut
    Ok. Alors tu n'as pas besoin d'utiliser l'Objet HttpServletRequest pour récuperer la valeur des tes inputs. Il suffit juste de récupérer la valeur directement via les attributs de ton management bean.

  7. #7
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut
    Non,j'ai pas un problème de récupération des attributs dans management bean juste je veut forcer l'envoi du formulaire à POST au lieu de GET.
    On faite le problème c'est que je suis entrain de générer un rapport PDF avec jasper report
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //...
    HttpServletResponse response = (HttpServletResponse) context
    					.getExternalContext().getResponse();
    response.getOutputStream().write(bytes);
    ce write retourne "INFO - 'POST' request expected. Dropping connection... - com.icesoft.faces.webapp.http.core.RequestVerifier "
    et c'est tout à fait logique d'après ce lien http://sventon.icefaces.org/svn/show...tVerifier.java
    et mon PDF est null

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2008
    Messages : 79
    Par défaut
    Ah ok, alors là je ne suis pas compétant, désolé.

  9. #9
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut
    en tout cas merci pour votre coopération!

  10. #10
    Membre éprouvé Avatar de juridakus
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 82
    Par défaut
    Citation Envoyé par ii.abbassi Voir le message
    [code]
    C'est un peut compliqué mais de toute façon ce n'est autre qu'un formulaire JSF simple avec des inputs et un bouton pour générer un PDF
    Essaie un peu ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    FacesContext context = FacesContext.getCurrentInstance();
    ExternalContext ectx = context.getExternalContext();
    ...
    HttpServletResponse response = (HttpServletResponse) ectx.getResponse();
     
     
    response.setContentLength(bytes.length);
    response.getOutputStream().write(bytes);
    response.setContentType("application/pdf");
    context.responseComplete();

  11. #11
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut
    Voilà le code du méthode qui génère le PDF mais toujours rien ne s'affiche coté client
    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
     
    public void  generateDevisPDF(){
     
     
    		try {			
     
    			Map parameters = new HashMap();
    			parameters.put("idDevis","D01");
     
    			Collection<Product> cp = this.serviceLocator.getProductServiceAble().getProducts();;
    			Collection jrxmlCollection = ProductFactory.createBeanCollection(cp );
     
     
     
     
    			File file = new File("./jasperFile");
    			JasperPrint jasperPrint = JasperFillManager.fillReport(
    					new FileInputStream(new File(file, "devis.jasper")),
    					parameters, new JRBeanCollectionDataSource(jrxmlCollection));
    			byte[] bytes = JasperExportManager.exportReportToPdf(jasperPrint);
     
     
     
    			FacesContext context = FacesContext.getCurrentInstance();
     
     
    			ExternalContext ectx = context.getExternalContext();
     
    			HttpServletResponse response = (HttpServletResponse) ectx.getResponse();
    //			HttpServletResponse response = (HttpServletResponse) context
    //			.getExternalContext().getResponse();
     
    			response.addHeader("Content-disposition",
    					"attachment;filename=devis.pdf");
    			response.setContentLength(bytes.length);
    			response.getOutputStream().write(bytes);
    			response.setContentType("application/pdf");
    			context.responseComplete();
    			//return null;
     
     
    		}
    		catch (JRException e)
    		{
    			e.printStackTrace();
    		}
    		catch (Exception e)
    		{
    			e.printStackTrace();
    		}
     
     
     
     
    	// return "devis";
    	}

  12. #12
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par ii.abbassi Voir le message
    dans mon managedBean j'ai testé ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    HttpServletRequest request = (HttpServletRequest) context
    			.getExternalContext().getRequest();
    System.out.println(request.getMethod());
    j'ai récupérer GET
    h:form envoi toujours les formulaire en POST. Donc ce bout de code, je serais curieux de savoir comemnt et où tu l'utilise. On peux voir l'action de #{salesBean.generateDevisPDF}, comment tu appelle ton bean pour en arriver à recevoir un GET??

  13. #13
    Membre éprouvé Avatar de juridakus
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 82
    Par défaut
    Si tu n'as aucune autre exception, essaie d'utiliser cette instruction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    response.addHeader("Content-disposition","inline;filename=devis.pdf");
    à la place de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    response.addHeader("Content-disposition","attachment;filename=devis.pdf");
    Je crois que "attachement" pose un problème avec certains navigateurs.

  14. #14
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    h:form envoi toujours les formulaire en POST. Donc ce bout de code, je serais curieux de savoir comemnt et où tu l'utilise. On peux voir l'action de #{salesBean.generateDevisPDF}, comment tu appelle ton bean pour en arriver à recevoir un GET??
    voilà la declaration de mon bean dans faces-config
    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
     
    <managed-bean>
    		<description>
    			Backing bean for sales.
            </description>
    		<managed-bean-name>salesBean</managed-bean-name>
    		<managed-bean-class>
    			view.bean.Sales.SalesBean
            </managed-bean-class>
    		<managed-bean-scope>request</managed-bean-scope>
     
    		<managed-property>
    			<property-name>serviceLocator</property-name>
    			<value>#{serviceLocatorBean}</value>
    		</managed-property>
    	</managed-bean>
    NB:j'utilise Spring dans mon application

  15. #15
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    ca ne nous avance a rien, ce qui est intéressante c'est de savoir
    -> où se trouve le code qui te sort que c'est un post (parce que "dans mon managedBean", c'est vague)
    -> qu'est-ce que tu fait pour déclencher l'exécution dudit code
    -> ce qu'il y a dans ta méthode d'action de ton form

  16. #16
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    ca ne nous avance a rien, ce qui est intéressante c'est de savoir
    -> où se trouve le code qui te sort que c'est un post (parce que "dans mon managedBean", c'est vague)
    -> qu'est-ce que tu fait pour déclencher l'exécution dudit code
    -> ce qu'il y a dans ta méthode d'action de ton form
    tu trouve dans les messages au dessus le code jsf (le formulaire)
    dans n'importe quelles méthodes(actions) du management bean si j'écris ces 2 lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
    System.out.println(request.getMethod());
    j'obtiens en tapant le bouton de l'action le mot GET sur la console de mon eclipse.
    NB:j'ai fait ça uniquement pour savoir si la méthode est POST ou GET

  17. #17
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    quelle version de JSF utilise-tu, quelle implémentation. Parce qu'aux dernière nouvelles, h:form, ça fait du POST, pas du GET!

    au fait, si tu remplace ton ice:commandebutton par un h:commandebutton, ca te dit toujours que c'est du GET?

  18. #18
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    quelle version de JSF utilise-tu, quelle implémentation. Parce qu'aux dernière nouvelles, h:form, ça fait du POST, pas du GET!

    au fait, si tu remplace ton ice:commandebutton par un h:commandebutton, ca te dit toujours que c'est du GET?
    *encore même chose
    *version :C'est la 1.2
    juste je me demande si tu sais l'apport de cette servlet dans mon web.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <servlet>
    		<servlet-name>Blocking Servlet</servlet-name>
    		<servlet-class>com.icesoft.faces.webapp.xmlhttp.BlockingServlet</servlet-class>
    		<load-on-startup> 1 </load-on-startup>
    	</servlet>
     
    	<servlet-mapping>
    		<servlet-name>Blocking Servlet</servlet-name>
    		<url-pattern>/block/*</url-pattern>
    	</servlet-mapping>

  19. #19
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Si tu veux downloader un fichier, n'utilise pas le boutton ice qui est basé sur l'ajax, utilise un h:commandButton normal.

    Si tu fais un redirect, il y'a un une requete GET qui est faite après le post.

Discussions similaires

  1. [2.x] Formulaire n'utilisant pas la méthode POST
    Par iKass dans le forum Symfony
    Réponses: 11
    Dernier message: 30/08/2012, 17h07
  2. Réponses: 0
    Dernier message: 26/02/2009, 19h36
  3. Réponses: 20
    Dernier message: 19/09/2006, 20h52
  4. Formulaire utilisant la méthode POST + popup
    Par Hell dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 27/10/2004, 13h34
  5. [HTTP] Syntaxe méthode POST
    Par Gruik dans le forum Développement
    Réponses: 3
    Dernier message: 26/07/2003, 17h12

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