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 2 Java Discussion :

Validation email


Sujet :

Struts 2 Java

  1. #1
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 17
    Par défaut Validation email
    Bonjour,

    j'essaie de controler la saisie d'un champ email dans un formulaire, ça n'a pas l'air si compliqué mais ça ne fonctionne pas, une chose m'échappe....

    src/main/webapp/customer/.jsp:
    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
     
    <s:form name="customerForm" action="saveCustomer" validate="true" theme="simple">
    ...
    		<tr>
    			<td><s:actionerror /></td>
    			<td><s:actionmessage /></td>
    		</tr>
    		<tr>
    		<td>Email perso :</td>
    			<td><s:textfield label="mail personnel"
    				name="currentCustomer.infomail.mailperso" size="50"/>
    			</td>
    		</tr>
    ...
    </s:form>
    src/main/ressources/CustomerAction-validation.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE validators PUBLIC 
    	"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
    	"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd" >  
     
    <validators>
    	<field name="currentCustomer.infomail.mailperso">
    		<field-validator type="email">
    		<message>Please enter a valid email address</message>
    		</field-validator>
    	</field>
    </validators>


    struts.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ...
    <package name="customer" extends="generic">
    		<action name="saveCustomer" method="saveCustomer" 
    			class="customerAction">
    			<result name="success" type="chain">list</result>
    			<result name="error">customer/view.jsp</result>
    		</action>
    </package>
    ...
    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
    package XXX.action;
    ...
    import com.opensymphony.xwork2.Action;
    import com.opensymphony.xwork2.Preparable;
    ...
     
    public class CustomerAction implements Preparable {
    	...
    	private Customer currentCustomer;
    	...
     
    	public String saveCustomer () {
    		customerService.save(currentCustomer);
    		return Action.SUCCESS;
    	}
     
    	...
    Merci d'avance de vos retours!!!

  2. #2
    Membre confirmé
    Étudiant
    Inscrit en
    Juin 2004
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 72
    Par défaut
    salut,

    personnellement je n'utilise pas la validation par les fichiers XML je trouve ça lourd à gérer je préfère la validation par annotations. Cependant les annotations ne fonctionnent qu'avec un jdk > 1.5
    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
    package XXX.action;
    ...
    import com.opensymphony.xwork2.Action;
    import com.opensymphony.xwork2.Preparable;
    ...
     
    @Validation()
    public class CustomerAction implements Preparable {
    	...
    	private Customer currentCustomer;
    	...
     
     
    	@Validations(
    		emails =
                        { @EmailValidator(type = ValidatorType.SIMPLE, fieldName = "currentCustomer.infomail.mailperso", message = "Please enter a valid email address")}
    	)
    	public String saveCustomer () {
    		customerService.save(currentCustomer);
    		return Action.SUCCESS;
    	}
     
    	...
     
    	public Customer getCurrentCustomer() {
    		return this.currentCustomer;
    	}
     
    	public void setCurrentCustomer(Customer currentCustomer) {
    		return this.currentCustomer = customer;
    	}
    	...
    }
    J'ai rajouté les accesseurs car sans accesseurs tu n'accède pas aux attributs.

    En se qui concerne le fichier struts.xml je ne sais pas si c'est fait exprès mais il me semble qu'il y a une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <action name="saveCustomer" method="saveCustomer" class="customerAction">
    En effet la fichier de validation xml doit se trouver (je crois) dans le même répertoire que la classe, par conséquent class="customerAction" est soit modifié volontairement pour le post (du forum) soit la classe se trouve belle et bien à la racine de ton dossier source, par conséquent le fichier de validation XML étant dans un dossier différent, struts ne peut pas récupérer la procédure de la validation.

    En gros si tu utilisent le fichier de valdiation XML il faut le placer dans le même répertoire que le classe cible. Après la je bloque mais vue que tu appel une méthode différente que celle par défaut (execute) il faut que tu dise à struts qu'elle méthode doit être soumise à validation, il me semble (je ne l'est jamais essayé) qu'il faut utilisé le séparateur ! entre la classe et la méthode de la classe. Le séparateur ! peut être utilisé pour appelle une méthode spécifique d'une classe attaché à une action, en gros http://....../saveCustomer!saveCustomer appellera la méthode saveCustomer de la classe CustomerAction (évidement il faut enlever l'attribut methode="saveCustomer" dans le fichier struts.xml.

    La classe ActionSupport propose une implémentation de base intéressantes.

    Dans le fichier struts.xml tu doit définir les result de type INPUT si tu utilisent la validation, en effet si la validation échoue c'est le result de type input qui est utilisé pour le vue. En principe le fichier cible par le result de type input est le formulaire de saisie appelant l'action, dans ton cas le customer/view.jsp

    pour le fichier JSP l'attribut validate c'est utile que si tu utilisent le theme xhtml/ajax, c'est dans la doc http://struts.apache.org/2.x/docs/form.html
    Tu n'est pas obligé de définir l'attribut name du form, struts le génère pour toi.

  3. #3
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 17
    Par défaut Struts2 validation annotations
    Merci de ta participation RoM3Ro!!

    Il semble que j'ai accumulé les erreurs... Entre temps, j'ai trouvé un tuto assez bien expliqué pour ceux qui veulent se lancer dans cette méthode de validation de formulaire : http://www.struts2.org/category/struts2-validation/

    En revenche, j'ai suivi ton conseil et j'ai commencé à explorer la validation de formulaire par annotations

    Pour me faire la main, j'ai appliqué cette méthode sur un formulaire de login. Tout se passe bien mais j'ai un affreux warning :
    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
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    2008-02-06 12:05:43 INFO  [ActionValidatorManagerFactory] Detected AnnotationActionValidatorManager, initializing it...
    2008-02-06 12:05:43 WARN  [OgnlUtil] Caught OgnlException while setting property 'methodName' on type 'com.opensymphony.xwork2.validator.validators.RequiredStringValidator'.
    ognl.NoSuchPropertyException: com.opensymphony.xwork2.validator.validators.RequiredStringValidator.methodName
    	at ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:132)
    	at com.opensymphony.xwork2.util.OgnlValueStack$ObjectAccessor.setProperty(OgnlValueStack.java:68)
    	at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:1656)
    	at ognl.ASTProperty.setValueBody(ASTProperty.java:101)
    	at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:177)
    	at ognl.SimpleNode.setValue(SimpleNode.java:246)
    	at ognl.Ognl.setValue(Ognl.java:476)
    	at com.opensymphony.xwork2.util.OgnlUtil.setValue(OgnlUtil.java:186)
    	at com.opensymphony.xwork2.util.OgnlUtil.internalSetProperty(OgnlUtil.java:360)
    	at com.opensymphony.xwork2.util.OgnlUtil.setProperties(OgnlUtil.java:76)
    	at com.opensymphony.xwork2.util.OgnlUtil.setProperties(OgnlUtil.java:103)
    	at com.opensymphony.xwork2.util.OgnlUtil.setProperties(OgnlUtil.java:90)
    	at com.opensymphony.xwork2.ObjectFactory.buildValidator(ObjectFactory.java:234)
    	at com.opensymphony.xwork2.validator.ValidatorFactory.getValidator(ValidatorFactory.java:252)
    	at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.getValidators(AnnotationActionValidatorManager.java:79)
    	at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.validate(AnnotationActionValidatorManager.java:134)
    	at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.validate(AnnotationActionValidatorManager.java:109)
    	at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.validate(AnnotationActionValidatorManager.java:96)
    	at com.opensymphony.xwork2.validator.ValidationInterceptor.doBeforeInvocation(ValidationInterceptor.java:142)
    	at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:148)
    	at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48)
    	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at com.opensymphony.xwork2.interceptor.ParametersInterceptor.intercept(ParametersInterceptor.java:161)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:105)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:83)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:207)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:74)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:127)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:107)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:206)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:115)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:143)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at com.opensymphony.xwork2.interceptor.PrepareInterceptor.intercept(PrepareInterceptor.java:115)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:170)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:123)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50)
    	at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:507)
    	at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:421)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1041)
    	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:354)
    	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:226)
    	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:627)
    	at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:149)
    	at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:123)
    	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:141)
    	at org.mortbay.jetty.Server.handle(Server.java:269)
    	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:430)
    	at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:701)
    	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:617)
    	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:199)
    	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:339)
    	at org.mortbay.jetty.nio.HttpChannelEndPoint.run(HttpChannelEndPoint.java:270)
    	at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:475)
    2008-02-06 12:05:43 WARN  [OgnlUtil] Caught OgnlException while setting property 'methodName' on type 'com.opensymphony.xwork2.validator.validators.RequiredStringValidator'.
    ognl.NoSuchPropertyException: com.opensymphony.xwork2.validator.validators.RequiredStringValidator.methodName
    	at ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:132)
    	at com.opensymphony.xwork2.util.OgnlValueStack$ObjectAccessor.setProperty(OgnlValueStack.java:68)
    	at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:1656)
    	at ognl.ASTProperty.setValueBody(ASTProperty.java:101)
    	at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:177)
    	at ognl.SimpleNode.setValue(SimpleNode.java:246)
    	at ognl.Ognl.setValue(Ognl.java:476)
    	at com.opensymphony.xwork2.util.OgnlUtil.setValue(OgnlUtil.java:186)
    	at com.opensymphony.xwork2.util.OgnlUtil.internalSetProperty(OgnlUtil.java:360)
    	at com.opensymphony.xwork2.util.OgnlUtil.setProperties(OgnlUtil.java:76)
    	at com.opensymphony.xwork2.util.OgnlUtil.setProperties(OgnlUtil.java:103)
    	at com.opensymphony.xwork2.util.OgnlUtil.setProperties(OgnlUtil.java:90)
    	at com.opensymphony.xwork2.ObjectFactory.buildValidator(ObjectFactory.java:234)
    	at com.opensymphony.xwork2.validator.ValidatorFactory.getValidator(ValidatorFactory.java:252)
    	at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.getValidators(AnnotationActionValidatorManager.java:79)
    	at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.validate(AnnotationActionValidatorManager.java:134)
    	at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.validate(AnnotationActionValidatorManager.java:109)
    	at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.validate(AnnotationActionValidatorManager.java:96)
    	at com.opensymphony.xwork2.validator.ValidationInterceptor.doBeforeInvocation(ValidationInterceptor.java:142)
    	at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:148)
    	at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48)
    	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at com.opensymphony.xwork2.interceptor.ParametersInterceptor.intercept(ParametersInterceptor.java:161)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:105)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:83)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:207)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:74)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:127)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:107)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:206)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:115)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:143)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at com.opensymphony.xwork2.interceptor.PrepareInterceptor.intercept(PrepareInterceptor.java:115)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:170)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:123)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    	at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50)
    	at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:507)
    	at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:421)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1041)
    	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:354)
    	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:226)
    	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:627)
    	at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:149)
    	at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:123)
    	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:141)
    	at org.mortbay.jetty.Server.handle(Server.java:269)
    	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:430)
    	at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:701)
    	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:617)
    	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:199)
    	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:339)
    	at org.mortbay.jetty.nio.HttpChannelEndPoint.run(HttpChannelEndPoint.java:270)
    	at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:475)
    Quelqu'un saurait comment résoudre ce problème??

  4. #4
    Membre confirmé
    Étudiant
    Inscrit en
    Juin 2004
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 72
    Par défaut
    t'as les sources? jsp + java + struts.xml

  5. #5
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 17
    Par défaut
    Code de ma jsp:
    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
    ...
    <s:form action="loginUser" theme="simple" >
    	<table width="300px">
                   <s:actionmessage />
    		<tr>
    			<td>
    				<s:textfield label="Login" name="login" />
    				<s:password label="Mot de passe" name="pwd" />
    			</td>
    		</tr>
    		<tr>
    			<td>
    				<s:submit label="valider" />
    			</td>
    		</tr>
     
     
    	</table>
    </s:form>
    ...
    Code de mon struts.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ...
    <package name="login" extends="struts-default">
    		<action name="loginUser" method="login"
    			class="loginAction">
    			<result name="success" type="chain">listUser</result>
    			<result name="error">login.jsp</result>
    			<result name="input">login.jsp</result>
    		</action>
    	</package>
    ...
    Code de 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
    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
    import com.opensymphony.xwork2.Action;
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.Preparable;
    import com.opensymphony.xwork2.validator.annotations.*;
     
    @Validation
    public class LoginAction extends ActionSupport implements Preparable {
     
    	public String execute() {
    		return Action.SUCCESS;
    	}
     
    	public String login () throws Exception {
    		// mon traitement
    	}
     
    	@RequiredStringValidator(type=ValidatorType.SIMPLE, 
    							 fieldName="login", 
    							 message="Veuillez saisir un login")
    	public String getLogin() {
    		return login;
    	}
     
    	public void setLogin(String login) {
    		this.login = login;
    	}
     
     
    	@RequiredStringValidator(type=ValidatorType.SIMPLE, 
    							 fieldName="pwd", 
    							 message="Veuillez saisir un mot de passe")
    	public String getPwd() {
    		return pwd;
    	}
     
    	public void setPwd(String pwd) {
    		this.pwd = pwd;
    	}
    }
    Je me suis inspiré de cet exemple (à ouvrir avec IE):http://www.roseindia.net/struts/stru...otations.shtml

    Les warnings apparaissent à chaque soumission de mon formulaire mais je ne vois où il va chercher tout ça pour si peu de lignes de code

  6. #6
    Membre confirmé
    Étudiant
    Inscrit en
    Juin 2004
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 72
    Par défaut
    personnellement je ne place les validation que sur les méthodes de l'action pas sur les accesseurs.

    Concernant la validation sur les accesseurs tu définie "fieldname" or la je vaoi pas trops à quoi il sert ?? je pense que tu peux le viré, de tout manière dans ls exemples il n'apparait pas. http://struts.apache.org/2.x/docs/va...nnotation.html .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @RequiredFieldValidator(type = ValidatorType.FIELD, message = "You must enter a value for bar.")
    j'ai chopé ça dans la page ci-dessus, il y a des différences avec ton code notamment le "type = ValidatorType.FIELD".

    je ne sais pas trop se que doit faire la classes LoginAction mais tu peux virer la méthode login et utiliser la méthode execute pour faire ton traitement. Dans ce cas de figure tu peux virer l'attribut "method" dans le struts.xml. Il ira chercher par défaut la méthode "execute".

  7. #7
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 17
    Par défaut
    Même en passant par la méthode execute(), ça ne change rien à mon problème.
    Suis-je le seul à avoir ces warnings parmi ceux qui utilisent la validation par annotations??

  8. #8
    Membre confirmé
    Étudiant
    Inscrit en
    Juin 2004
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 72
    Par défaut
    c'est la méthode execute qui allait corriger ton problème, c'est juste "une bonne pratique", lorsque que la classe action n'implémente qu'une action, alors il est plus utile d'utiliser la méthode execute, c'est plus claire.

    Dans tous les cas ce que je comprend de la doc c'est qu'il faut mieux utilisé type = ValidatorType.FIELD sur une property et type=ValidatorType.SIMPLE sur une méthode (execute par exemple) ensuite, pourquoi dans ton code dire que tu veux valider sur la property login
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @RequiredStringValidator(type=ValidatorType.SIMPLE, 
    							 fieldName="login", 
    							 message="Veuillez saisir un login")
    alors que tu annote la property login
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @RequiredStringValidator(type=ValidatorType.SIMPLE, 
    							 fieldName="login", 
    							 message="Veuillez saisir un login")
    	public String getLogin() {
    		return login;
    	}
    a ta place je mettrais plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @RequiredFieldValidator(type = ValidatorType.FIELD, message = "You must enter a value for bar.")
    	public String getLogin() {
    		return login;

  9. #9
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 17
    Par défaut
    J'ai déjà essayé cette syntaxe, j'ai toujours des warnings dans mes logs, ça ne gène pas l'exécution de mon appli mais ça fait tache!

    ça serait dommage de valider mes formulaires avec du javascript alors que struts fourni des solutions (presque) toutes prêtes...

  10. #10
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 17
    Par défaut
    Passons mon problème de warnings, j'ai un autre problème plus bloquant :
    je suis en train de mettre en place une validation de formulaire (création/modif d'un customer) en utilisant des annotations sur les méthodes (saveCustomer() et createCustomer()).
    Lors de la modifiation d'un customer, les données pré-enregistrées (comme le nom, l'email par exemple) ne sont pas retournées dans ma jsp (pas pratique pour modifier des champs...). Par contre, si je mets en commentaire les annotations de validation, toutes ces données me s'affichent et sont prètes à être modifier.

  11. #11
    Membre confirmé
    Étudiant
    Inscrit en
    Juin 2004
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 72
    Par défaut
    salut,

    j'ai plutôt l'impression que ton problème viens du faite que tu essaie de faire tout en même temps.

    Je pense qu'il serait beaucoup plus judicieux d'avancer par étapes. Pour cela, le meilleur moyen est de réaliser des tutoriels qui te permettront d'appréhender chaque élément de struts2, notamment le fonctionnement interne. Personnellement je te conseil ce site http://www.roseindia.net/struts/struts2/index.shtml.

  12. #12
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 17
    Par défaut
    J'ai trouvé la solution à mon problème de warnings : il m'a suffit de passer de la version de struts 2.0.6 à la 2.0.8.

    Concernant mon autre problème, effectivement j'essaie de tout faire en même temps car la création et la modification de clients fonctionnent déjà, j'ai juste voulu y intégrer un controle de saisie par validation de formulaire.

    Résumé des épisodes précédents:

    je pars d'une jsp me listant tous mes clients avec un lien sur chacun de leur id
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <a href="<s:url action="loadCustomer"><s:param name="id" value="id"/></s:url>">
    	<img src="images/edit.png" />
    </a>
    <a href="<s:url action="createCustomer"></s:url>">Ajouter un client</a>
    struts.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <action name="loadCustomer" method="loadCustomer" 
    			class="customerAction">
    			<result name="success">customer/view.jsp</result>
    			<result name="input">customer/view.jsp</result>
    </action>
    <action name="createCustomer" method="createCustomer"
    			class="customerAction">
    			<result name="success">customer/view.jsp</result>
    			<result name="input">customer/view.jsp</result>
    		</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
    @Validations(
    		requiredStrings =
                { @RequiredStringValidator(type = ValidatorType.SIMPLE, 
                        				   fieldName = "currentCustomer.lastName", 
                        				   message = "Please enter a valid name"),
                    @RequiredStringValidator(type = ValidatorType.SIMPLE, 
                                				   fieldName = "currentCustomer.infomail.mailperso", 
                                				   message = "You must enter a chaine for mail.")}
    	)
    	public String saveCustomer () {
    		service.save(currentCustomer);
    		return Action.SUCCESS;
    	}
    public String loadCustomer ()throws Exception {
    		currentCustomer = service.find(getId());
    		return Action.SUCCESS;
    	}
    public String createCustomer () {
    		currentCustomer = new Customer();
    		return Action.SUCCESS;
    	}
    view.jsp pour création et modification
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <s:form name="customerForm" theme="simple" action="saveCustomer" >
    <tr>
    			<td>
    				<s:textfield label="Email perso" theme="xhtml"
    					name="currentCustomer.infomail.mailperso" />
    			</td>
    		</tr>
    </s:form>
    La création se passe bien
    La modification


    PS: merci encore de d'intéresser à mon pb RoM3Ro

  13. #13
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 17
    Par défaut
    J'ai trouvé par hasard la solution mon problème sans être vraiment sûr de comprendre...

    Il m'a fallut ajouter dans mon struts.xml la balise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <interceptor-ref name="basicStack"/>
    pour chacune de mes actions qui interagissent avec ma jsp de saisie.

    pour plus d'explication, voilà un peu de lecture
    http://struts.apache.org/2.x/docs/interceptors.html
    http://struts.apache.org/2.0.6/docs/...ion-fails.html

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 95
    Par défaut

    Il va falloir ajouter ca dans le FAQ

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. validation email @domaine.fr
    Par brisso dans le forum Langage
    Réponses: 5
    Dernier message: 09/03/2011, 11h56
  2. [RegExp] expression régulière pour validation email
    Par wwwbillgates dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/08/2010, 17h05
  3. comment valider email
    Par ishere11 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/01/2010, 21h49
  4. [DEBUTANTE] Validation email et controle formulaire
    Par newmar dans le forum Struts 1
    Réponses: 16
    Dernier message: 14/04/2008, 02h14
  5. Controle de validation Email
    Par luimême dans le forum ASP.NET
    Réponses: 4
    Dernier message: 12/11/2007, 13h45

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