Bonjour ,
J'essaie de mettre en place la génération de document avec rtfTemplate , en y allant par étape.
En un premier lieu mon but est simplement éditer un document .rtf qui ne contient que du texte( sans les objets java que je ferais en second lieu )i.e. avoir la fenetre qui s'ouvre(ouvrir, enregistrer..).
j'utilise struts et lorsque que je suis dans ma jsp je clique sur une image qui apelle la methode valider de mon action et celle-ci fait un forward pour lancer ma servlet TestSC1 qui hérite de AbstractRTFTemplateServlet.
voici le code de TestSC1:
J'ai utilisé l'exemple qu'il y avait dans la distribution rtftemplate-web-usecases-1.0.1-b14 en mettant en dur le nom de mon fichier pour mon premier test.
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95 package fr.gws.exxeco; import java.io.File; import java.io.FileReader; import java.io.InputStream; import java.io.Reader; import javax.servlet.http.HttpServletRequest; import net.sourceforge.rtf.template.IContext; import net.sourceforge.rtf.web.servlet.AbstractRTFTemplateServlet; /** * Servlet implementation class TestSC1 */ public class TestSC1 extends AbstractRTFTemplateServlet { /** * */ private static final long serialVersionUID = 8074086949778238114L; //private static final String JAKARATA_VELOCITY_MODEL = "jakarta-velocity-model"; private static final String REQUEST_MODELNAME = "SC1"; private static final String REQUEST_MUSTBECACHED = "mustBeCached"; protected Reader getRTFReader(HttpServletRequest request) throws Exception { // 1. Get Real path of RTF model. String rtfModelName = "SC1"; rtfModelName+= ".rtf"; String rtfModelPath = "/models/suiviChantier/" + rtfModelName; rtfModelPath = super.getRealPathOfRTFModel(request, rtfModelPath); // 2. Get Reader of RTF model Reader rtfModelReader = new FileReader(new File(rtfModelPath)); return rtfModelReader; } protected String cacheWithKey(HttpServletRequest request) { // Test if checkbox cache is checked if (request.getParameter(REQUEST_MUSTBECACHED) != null) { // Cache must be enable for the RTF model // return name of the RTF model return request.getParameter(REQUEST_MODELNAME); } return null; } protected String unCacheWithKey(HttpServletRequest request) { // Test if checkbox cache is checked if (request.getParameter(REQUEST_MUSTBECACHED) == null) { // Cache must be disable for the RTF model // return name of the RTF model return request.getParameter(REQUEST_MODELNAME); } return null; } protected void putContext(HttpServletRequest request, IContext ctx ) throws Exception { } protected InputStream getXMLFieldsAvailable(HttpServletRequest request) throws Exception { String xmlFieldsAvailable = "SC1" + ".fields.xml"; InputStream inputStream = TestSC1.class.getResourceAsStream(xmlFieldsAvailable); return inputStream; } /** * return name of FileName for Content-Disposition */ protected String getFileNameOfContentDisposition(HttpServletRequest request) { String rtfModelName = request.getParameter(REQUEST_MODELNAME); if (rtfModelName != null) { return rtfModelName + ".rtf"; } return super.getFileNameOfContentDisposition(request); } }
Mon souci est que quand je lance cette servlet j'obtient cette erreur :
J'ai fait pas mal de recherche dans les forums et apparemment getWriter() a déjà été appelé dans la jsp pour instancier l'objet out.
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 6 janv. 2010 14:48:43 org.apache.catalina.core.ApplicationDispatcher invoke GRAVE: "Servlet.service()" pour la servlet TestSC1 a lancé une exception java.lang.IllegalStateException: "getWriter()" a déjà été appelé pour cette réponse at org.apache.catalina.connector.Response.getOutputStream(Response.java:579) at org.apache.catalina.connector.ResponseFacade.getOutputStream(ResponseFacade.java:183) at javax.servlet.ServletResponseWrapper.getOutputStream(ServletResponseWrapper.java:102) at clime.messadmin.filter.MessAdminResponseWrapper.getOutputStream(MessAdminResponseWrapper.java:399) at net.sourceforge.rtf.web.servlet.AbstractRTFTemplateServlet.error(AbstractRTFTemplateServlet.java:213) at net.sourceforge.rtf.web.servlet.AbstractRTFTemplateServlet.doRequest(AbstractRTFTemplateServlet.java:177) at net.sourceforge.rtf.web.servlet.AbstractRTFTemplateServlet.doPost(AbstractRTFTemplateServlet.java:74) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302) at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1054) at org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:292) at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:384) at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:344) at fr.improve.foundations.extension.strutslayout.StrutsLayoutRequestProcessor.processForwardConfig(StrutsLayoutRequestProcessor.java:53) at fr.improve.foundations.client.navigation.actions.ImproveFoundationProcessor.processActionPerform(ImproveFoundationProcessor.java:61) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:225) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1858) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:459) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at clime.messadmin.filter.MessAdminFilter.doFilter(MessAdminFilter.java:106) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at fr.improve.foundations.component.transaction.ThreadContextFilter.doFilter(ThreadContextFilter.java:44) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) at java.lang.Thread.run(Unknown Source)
Je me dis donc que je m'y prends mal pour implémenter rtfTemplate dans une appli web.
Si quelqu'un pourrais m'éclairer car ma jsp est mon point de départ et si j'ai bien compris j'ai besoin de cette servlet.
Voilà pour plus d'information le reste de mon code :
dans web.xml :
dans stuts-config voici mon action:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13<!-- Servlet RTFtemplate --> <servlet> <servlet-name>TestSC1</servlet-name> <display-name>TestSC1</display-name> <servlet-class>fr.gws.exxeco.TestSC1</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>TestSC1</servlet-name> <url-pattern>/TestSC1</url-pattern> </servlet-mapping>
ma jsp qui ne contient qu'une liste où je choisi le document :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <action attribute="imprimerSchDoc" input="/imprimerSchDoc.jsp" name="imprimerSchDoc" parameter="reqCode" path="/imprimerSchDoc" scope="session" type="fr.asfalia.asfabox.client.suivichantier.genererDoc.imprimerSchDocAction" validate="false"> <forward name="ok" path="/imprimerSchDoc.jsp" /> <forward name="editerDoc" path="/TestSC1" /> </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 <%@ page language="java" %> <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %> <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %> <%@ taglib uri="http://struts.application-servers.com/layout" prefix="layout" %> <layout:html> <layout:form action="/imprimerSchDoc" key="affaire.imprimerDoc" reqCode="init"> <layout:panel key="imprimerDoc.genrationDocuments"> <layout:select key="imprimerDoc.libDocument" property="typeModeleDoc.idRefTypeModeleDoc" isRequired="false"> <layout:options collection="typeModelList" labelProperty="libRefTypeModeleDoc" property="idRefTypeModeleDoc"/> </layout:select> </layout:panel> </layout:form> </layout:html>
mon action imprimerSchDocAction
les méthodes init et initArray ne faisant que charger ma comboBox pour l'instant.
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90 package fr.asfalia.asfabox.client.suivichantier.genererDoc; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.actions.DispatchAction; import fr.asfalia.asfabox.application.service.AppTSchAffaireService; import fr.gws.exxeco.application.service.AppTRefTypeModeleDocService; import fr.gws.exxeco.client.action.ButtonMenuBarAction; import fr.gws.exxeco.enterprise.entity.TRefTypeModeleDoc; import fr.gws.exxeco.enterprise.entity.TSchAffaire; import fr.improve.foundations.architecture.ApplicationLayer; import fr.improve.struts.taglib.layout.util.FormUtils; public class imprimerSchDocAction extends DispatchAction implements ButtonMenuBarAction { private static AppTRefTypeModeleDocService typeModelService = (AppTRefTypeModeleDocService) ApplicationLayer.getDefaultInstance().getService(AppTRefTypeModeleDocService.class); private static AppTSchAffaireService schAffaireService = (AppTSchAffaireService) ApplicationLayer.getDefaultInstance().getService(AppTSchAffaireService.class); private void initArray(ActionForm form, HttpServletRequest request) { ImprimerSchDocForm lc_form = (ImprimerSchDocForm)form; TSchAffaire schAffaire = lc_form.getSchAffaire(); if (schAffaire != null) { if (schAffaire.getTRefTypePrestation() != null) { // mettre la liste de lib de models des docs dans la request List<TRefTypeModeleDoc> modelList = typeModelService.rechercheTRefTypeModeleDocListByTRefTypePrestation(schAffaire.getTRefTypePrestation().getIdRefTypePrestation()); request.setAttribute("typeModelList", modelList); } } } public ActionForward init(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { String result = "ok"; ImprimerSchDocForm lc_form = (ImprimerSchDocForm) form; lc_form.setTypeModeleDoc(new TRefTypeModeleDoc()); FormUtils.setFormDisplayMode(request, form, FormUtils.EDIT_MODE); // boutons enregistrer et annuler actifs request.setAttribute("menuBar", "bouton_enregistrer_annuler_actif"); String selectedIdSchAffaireString = request.getParameter("selectedIdSchAffaire"); int selectedSchAffaireId = selectedIdSchAffaireString != null ? Integer.valueOf((String)selectedIdSchAffaireString): 0; if (selectedSchAffaireId == 0) { selectedSchAffaireId = (Integer)request.getSession().getAttribute("idSchAffaireString"); } if (selectedSchAffaireId != 0){ lc_form.setSchAffaire((TSchAffaire)imprimerSchDocAction.schAffaireService.rechercherParId(selectedSchAffaireId)); } initArray(form, request); return mapping.findForward(result) ; } public ActionForward valider(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { String result = "editerDoc"; ImprimerSchDocForm lc_form = (ImprimerSchDocForm) form; return mapping.findForward(result); } }
Merci pour vos réponses.
De mon coté je continue à chercher .
Partager