Bonjour à tous,
j'utilise le taglib displaytag pour mes tableaux.
J'aimerais avoir un example ou savoir comment peut on faire pour avoir un lien sur chaque ligne qui me renvoie l'objet selectioner?
merci
tu devrais aller voir à cette url, il parle des liens en utilisant les décorateurs :
http://displaytag.homeip.net/display...rator-link.jsp
merci, je vais utiliser ca maintenant mais je n'ai pas tous compris comment ca fonctione:
pour l'instant j'ai fait ca et ca ne marche pas
cote JSP:
cote decorator:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <display:table cellpadding="0" cellspacing="0" name="allUser" decorator="be.qspin.qats.utilities.Decorator" defaultsort="1" requestURI="/logonSubmit.do" pagesize="20" sort="list"> <display:column property="login" title="login" sortable="true"/> <%--logic:iterate id="role" name="roles"> <display:column property="role" title="Roles" sortable="true"/> </logic:iterate--%> <display:column property="UserSelected"><bean:message key="button.modify"/></display:column> </display:table>
sachant que j'utilise struts et que je voudrais afficher le login dans le champs login lorsque j'utilise le decorateur.
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
20public class Decorator extends TableDecorator { public Decorator(){ super(); } public String getUserSelected() { User user= (User) getCurrentRowObject(); CreateUserForm cuf = new CreateUserForm(); cuf.setLogin(user.getLogin()); //cuf.setSelectRole() //(CreateUserForm) form).setLogin(user.getLogin()); return "<a href=\"main.jsp>Modifier</a>"; } }
je passe directement par le bean form de struts mais je ne devrais pas passer plutot par le bean action de struts??
toujours est il que lors de l'execution je me retrouve avec cet erreur
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 type Rapport d'exception message description Le serveur a rencontré une erreur interne () qui l'a empêché de satisfaire la requête. exception org.apache.jasper.JasperException: javax.servlet.jsp.JspException: Error looking up property "UserSelected" in object type "be.qspin.qats.entities.User". org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368) org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085) org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:263) org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398) org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:318) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) javax.servlet.http.HttpServlet.service(HttpServlet.java:709) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368) cause mère javax.servlet.ServletException: javax.servlet.jsp.JspException: Error looking up property "UserSelected" in object type "be.qspin.qats.entities.User". org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:854) org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791) org.apache.jsp.main_jsp._jspService(main_jsp.java:246) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368) org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085) org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:263) org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398) org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:318) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) javax.servlet.http.HttpServlet.service(HttpServlet.java:709) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368) cause mère Exception: [.LookupUtil] Error looking up property "UserSelected" in object type "be.qspin.qats.entities.User". Cause: Unknown property 'UserSelected' org.displaytag.util.LookupUtil.getBeanProperty(LookupUtil.java:141) org.displaytag.model.Column.getValue(Column.java:124) org.displaytag.model.Column.createChoppedAndLinkedValue(Column.java:201) org.displaytag.model.Column.initialize(Column.java:178) org.displaytag.render.TableWriterTemplate.writeTableBody(TableWriterTemplate.java:308) org.displaytag.render.TableWriterTemplate.writeTable(TableWriterTemplate.java:133) org.displaytag.render.HtmlTableWriter.writeTable(HtmlTableWriter.java:643) org.displaytag.tags.TableTag.writeHTMLData(TableTag.java:1549) org.displaytag.tags.TableTag.doEndTag(TableTag.java:1218) org.apache.jsp.main_jsp._jspx_meth_display_table_0(main_jsp.java:455) org.apache.jsp.main_jsp._jspService(main_jsp.java:218) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368) org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085) org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:263) org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398) org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:318) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) javax.servlet.http.HttpServlet.service(HttpServlet.java:709) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
de plus je ne vois pas tres bien comment ca peu me servir pour trier une colonne de date??
D'une, le problème de tri sur d'une colonne sur des dates c'est autre chose.
Sinon pour ton lien il faut que tu précises en argument le login du user que tu veux éditer
style:
Ce qui mettra user.getLogin() dans le champs login de ton form dans l'action correspondant a visualiser.do.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7public String getUserSelected() { User user= (User) getCurrentRowObject(); return "<a href=\"visualiser.do?login="+user.getLogin()+">Modifier</a>"; }
En effet tu ne dois pas passer directement par le form.je passe directement par le bean form de struts mais je ne devrais pas passer plutot par le bean action de struts??
Pour ton erreur écrit plutot userSelected (sans majuscule a user!)
A quoi te sert : <bean:message key="button.modify"/> ?
ha oui ca y est j'ai compris. merci a toi
me sert a afficher le texte dans le tableau, ici : modify. c'est la dessus que ce fait le lien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part <bean:message key="button.modify"/>
Pendant qu'on y est, J'ai vu que pour le tri sur les dates, il fallait aussi passé par un decorateur, c'est bien cela? comment faut il faire? que faut il mettre dnas le decorateur?
Tu n'en as pas besoin le texte sera afficher grace au décorateur
"<a href=\"visualiser.do?login="+user.getLogin()+">Modifier</a>"
Le lien se fera sur Modifier
pour ton tri sur les dates que veux tu faire exactement? veux tu que la colonne soit trié dès le départ et que cela reste figé ou que l'utilisateur puisse trié une colonne date?
Je ne pense pas que tu ais besoin de décorateur pour cela
pour le premier cas tu fais un order by sur ta requete select et pour le second cas il me semble qu'il faut ajouter sortable="true" a ta balise <display:column>
maintenant j'ai un probleme de mise en page.
mes entrees sont toutes sur a meme ligne et dans la colonne action (celle ou devrait se faire le lien), il n'y a rien
exemple de mon tableau qui est actuellement comme ceci:
usr1 usr2 usr3 .....
au lieu de comme ceci:
usr1
usr2
..
.
.
.
pourquoi j'ai cela?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <display:table cellpadding="0" cellspacing="0" name="allUser" decorator="be.qspin.qats.utilities.Decorator" defaultsort="1" requestURI="/logonSubmit.do" pagesize="20" sort="list"> <display:column property="login" title="login" sortable="true"/> <display:column property="userSelected" title="Action"/> </display:table>
je sais pas mais essaye avec ceci dans un premier temps :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <display:table name="allUser" decorator="be.qspin.qats.utilities.Decorator" requestURI="/logonSubmit.do" pagesize="20" sort="list"> <display:column property="login" title="login" sortable="true"/> </display:table>
oui en fait j'ai encore un petit souci
j'ai bien l'url suivante dans la barre d'adresse : http://localhost:8084/QATS/logonSubmit.do?login=usr1
mais le paramtre ne s'affiche pas dans le champs de mon formulaire qui s'appel login.
Je rappel que je travaille avec struts.
De plus si je suis logger avec un autre user et que je souhaite modifier un autre user, je me fais delogguer
peux tu me montrer le code de ton action correspondant a logonSubmit.do stp
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 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { String login = ((CreateUserForm) form).getLogin(); String password = ((CreateUserForm) form).getPassword(); String[] role = ((CreateUserForm) form).getSelectRole(); int num =((CreateUserForm) form).getNumber(); if (isCancelled(request)){ return mapping.findForward(CANCEL); } Users.createUser(login, password, role); HttpSession session = request.getSession(); request.setAttribute("allUser", Users.getUsers()); request.setAttribute("allRole", Roles.getRoles()); return mapping.findForward(SUCCESS); /*} else{ ActionErrors errors = new ActionErrors(); errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.user.create")); saveMessages(request,errors); return (new ActionForward(mapping.getInput())); }*/ }
pourrait tu me montrer ton fichier de config struts
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"> <struts-config> <form-beans> <form-bean name="AddCommentForm" type="be.qspin.qats.struts.form.AddCommentForm"/> <form-bean name="UploadForm" type="be.qspin.qats.struts.form.UploadForm"/> <form-bean name="CreateApplicantForm" type="be.qspin.qats.struts.form.CreateApplicantForm"/> <form-bean name="CreateUserForm" type="be.qspin.qats.struts.form.CreateUserForm"/> <form-bean name="LogonForm" type="be.qspin.qats.struts.form.LogonForm"/> <form-bean name="UploadForm" type="be.qspin.qats.struts.form.UploadForm"/> </form-beans> <global-exceptions> <!--exception key="message.java.lang.Exception" path="/error.jsp" scope="request" type="java.lang.Exception"/--> </global-exceptions> <global-forwards> <forward name="logout" path="/logon.jsp"/> <forward name="logon" path="/main.jsp"/> </global-forwards> <action-mappings> <action input="/logon.jsp" name="LogonForm" path="/logonSubmit" scope="session" type="be.qspin.qats.struts.action.LogonAction"> <forward name="cancel" path="/logon.jsp"/> <!--exception key="message.java.lang.RuntimeException" path="/error.jsp" type="java.lang.RuntimeException"/--> </action> <action forward="/logon.jsp" path="/logout"> <!--exception key="message.java.lang.RuntimeException" path="/error.jsp" type="java.lang.RuntimeException"/--> </action> <action input="/main.jsp" name="CreateUserForm" path="/createUser" scope="session" type="be.qspin.qats.struts.action.CreateUserAction"> <forward name="cancel" path="/main.jsp"/> <forward name="success" path="/main.jsp"/> <!--exception key="message.java.lang.RuntimeException" path="/error.jsp" type="java.lang.RuntimeException"/--> </action> <action input="/applicant/applicant.jsp" name="CreateApplicantForm" path="/createApplicant" scope="session" type="be.qspin.qats.struts.action.CreateApplicantAction"> <forward name="success" path="/applicant/applicant.jsp"/> </action> <action input="/applicant/newApplicant.jsp" name="UploadForm" path="/upload" scope="session" type="be.qspin.qats.struts.action.UploadAction"> <forward name="success" path="/applicant/applicant.jsp"/> <!--exception key="message.java.lang.RuntimeException" path="/error.jsp" type="java.lang.RuntimeException"/--> </action> <action input="/applicant/commentApplicant.jsp" name="AddCommentForm" path="/addComment" scope="session" type="be.qspin.qats.struts.action.AddCommentAction"> <forward name="sucess" path="/applicant/commentApplicant.jsp"/> </action> </action-mappings> <controller processorClass="org.apache.struts.tiles.TilesRequestProcessor"/> <message-resources parameter="be/qspin/qats/struts/ApplicationResource"/> <!-- ========================= Tiles plugin ===============================--> <!-- This plugin initialize Tiles definition factory. This later can takes some parameters explained here after. The plugin first read parameters from web.xml, thenoverload them with parameters defined here. All parameters are optional. The plugin should be declared in each struts-config file. - definitions-config: (optional) Specify configuration file names. There can be several comma separated file names (default: ?? ) - moduleAware: (optional - struts1.1) Specify if the Tiles definition factory is module aware. If true (default), there will be one factory for each Struts module. If false, there will be one common factory for all module. In this later case, it is still needed to declare one plugin per module. The factory will be initialized with parameters found in the first initialized plugin (generally the one associated with the default module). true : One factory per module. (default) false : one single shared factory for all modules - definitions-parser-validate: (optional) Specify if xml parser should validate the Tiles configuration file. true : validate. DTD should be specified in file header (default) false : no validation Paths found in Tiles definitions are relative to the main context. --> <plug-in className="org.apache.struts.tiles.TilesPlugin" > <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" /> <set-property property="moduleAware" value="true" /> </plug-in> <!-- ========================= Validator plugin ================================= --> <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/> </plug-in> <plug-in className="be.qspin.qats.struts.plugin.HibernatePlugIn"/> </struts-config>
en fait ca vien de lail faut que tu ais quelque chose du type CreateUserForm sinon évidemment quand tu veux récupérer ton login dans ta fonction execute tu n'as rien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <action input="/logon.jsp" name="LogonForm" path="/logonSubmit" scope="session" type="be.qspin.qats.struts.action.LogonAction"> <forward name="cancel" path="/logon.jsp"/> <!--exception key="message.java.lang.RuntimeException" path="/error.jsp" type="java.lang.RuntimeException"/--> </action>
A ta place je changeré d'action pour le lien cela t'éviterait la déconnection (i.e. par exemple: http://localhost:8084/QATS/visualiser?login=usr1)
Tu n'as pas besoin de créer un nouveau formulaire si createUserForm convient à ce que tu désires, mais il faut que tu changes l'action de ton lien. En effet dans l'action "logonSubmit" tu utilises le formulaire LogonForm, et donc ton lien ne modifie pas le login du createUserForm mais le login(s'il existe) du LogonForm.
Si tu ne comprends ce que je veux dire, et que le formulaire logonForm a un attribut login, change dans ta fonction execute:
String login = ((CreateUserForm) form).getLogin();
en:
String login = ((LogonForm) form).getLogin();
System.out.println("Le login est :"+login);
et la normalement que tu devrais voir s'afficher :"usr1"
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager