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
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
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.
dans mon managedBean j'ai testé ça
j'ai récupérer GET
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 HttpServletRequest request = (HttpServletRequest) context .getExternalContext().getRequest(); System.out.println(request.getMethod());
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.
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
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>
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.
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
ce write retourne "INFO - 'POST' request expected. Dropping connection... - com.icesoft.faces.webapp.http.core.RequestVerifier "
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);
et c'est tout à fait logique d'après ce lien http://sventon.icefaces.org/svn/show...tVerifier.java
et mon PDF est null
Ah ok, alors là je ne suis pas compétant, désolé.
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();
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"; }
Si tu n'as aucune autre exception, essaie d'utiliser cette instruction:
à la place de:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 response.addHeader("Content-disposition","inline;filename=devis.pdf");
Je crois que "attachement" pose un problème avec certains navigateurs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 response.addHeader("Content-disposition","attachment;filename=devis.pdf");
voilà la declaration de mon bean dans faces-config
NB:j'utilise Spring dans mon application
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>
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
j'obtiens en tapant le bouton de l'action le mot GET sur la console de mon eclipse.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest(); System.out.println(request.getMethod());
NB:j'ai fait ça uniquement pour savoir si la méthode est POST ou GET
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>
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.
Articles: Richfaces - JBosstools pour JSF.
Partager