2012-01-10 5 views
3

Je suis nouveau sur Java Web. Je suis un tutoriel sur Struts 2 à: http://viralpatel.netValidation côté client dans Struts 2

Je réussis à créer la validation côté serveur, mais le côté client ne fonctionne pas. Lorsque soumettre, je remarque qu'une méthode javascript n'est pas définie. Essayez de regarder la source, je vois qu'aucun script n'est généré. Ce est généré HTML source

http://pastebin.com/Lc49jnMs 

Il n'y a pas javascript méthode 'validateForm_customer()'.

En customer.jsp, j'ai ajouté validate attrubute:

<s:form action="customer.action" method="post" theme="xhtml" validate="true"> 

et a également ajouté:

<s:actionerror/> 
<s:fielderror /> 

et

<s:head/> 

En struts.xml:

<action name="customer" class="mypackage.CustomerAction"> 
    <result name="success">/success.jsp</result> 
    <result name="error">/customer.jsp</result> 
</action> 

Dans le code, j'ai étendu ActionSupport et j'ai le fichier CustomerAction-validation.xml. Seule la validation côté client ne fonctionne pas, la validation côté serveur fonctionne parfaitement.

J'utilise des entretoises 2.1.6. Je ne sais pas mais le nouveau vesion ne fonctionne pas non plus avec moi. Il construire le succès, mais avoir une erreur dans initialize répartiteur, alors lorsque vous utilisez taglib "struts-tags", il jette une classe erreur

The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has passed through its servlet filter, which initializes the Struts dispatcher needed for this tag. - [unknown location] 

causée par

org.apache.struts2.views.gxp.inject.InjectedObjectContainer 

pas trouvé!

Les entretoises 2.1.6 semblent fonctionner jusqu'à ce que j'essaie d'utiliser la validation.

Qu'est-ce que j'ai fait de mal?

Merci et désolé pour mon mauvais anglais

+0

Salut @ binhnx218, Cette est viral. Je suis content que mon site vous ait été utile. En ce qui concerne votre problème: Pouvez-vous poster votre code struts.xml. Il serait utile de trouver la cause du problème. –

+0

Bonjour @viralpatel: Votre site est un excellent site de tutoriel que j'ai jamais vu. C'est [link to] (http://pastebin.com/34LY4G8S) mon struts.xml. Merci beaucoup – binhnx218

+0

lorsque vous utilisez la validation côté client, vérifiez si elle inclut 'validation.js' comme si je me souviens bien ce fichier js est la clé> en ce qui concerne l'exception afficher l'URL que vous appuyez sur cette erreur –

Répondre

0

Struts balises ne sont utilisables que lorsque la demande est passé à travers son filtre de servlet Il semble que vous avez manqué les correspondances de filtre dans web.xml pour les balises que vous avez définis. Assurez-vous qu'ils sont là.

+0

Cela est également possible si OP va frapper la page jsp directe contenant les balises stuts2 –

+0

@thinksteep: Ce n'est pas le problème. J'ai mapping-filter dans web.xml: [ici] (http://pastebin.com/nP5THXFe) – binhnx218

+0

Je suis d'accord. Mais il semble que OP n'a pas fait cela. – kosa

1

Tout d'abord, je vous recommande vivement d'utiliser la dernière version (pour des raisons évidentes de sécurité,), qui est actuellement 2.3.1.1

Ensuite, retirer struts2-GXP-plugin (il semble que vous n'avez pas besoin), après Ensuite, voir ce qui se passe

+0

Merci! Mon erreur est que je ne remarque pas que le serveur a mis en cache les bibliothèques, donc elles sont encore construites bien que j'ai été supprimé de mon projet. J'ai enlevé 2 paquets antlr-2.7.2, struts2-gxp-plugin, nettoyer et reconstruire et puis je peux exécuter des entretoises 2.3.1.1. Mais le problème de validation côté client n'est pas résolu. Est-ce que struts génère automatiquement javascript pour valider la base sur notre [ActionClass] -validation.xml, ou nous devons le faire nous-mêmes? – binhnx218

1

Après un long essai, j'ai compris que la validation ne fonctionne pas sur la page d'accueil définie dans le fichier web.xml, donc une redirection doit être effectuée dans la page d'accueil et la rediriger en interne page. Et cette redirection n'est pas remarquée par l'utilisateur. Voici un exemple de code de mon fonctionnement.

indice.jsp

<!--importing jslt library to redirect the page (jar required jstl.jar and standard.jar) --> 
<%@ taglib prefix="j" uri="http://java.sun.com/jsp/jstl/core" %> 
<!--redirection the index page to some action named index see strut.xml file --> 
<j:set var="baseUrl" scope="session" value="http://127.0.0.1:8080/strutsBasic/"/> 
<j:redirect url="index" /> 

struts.xml

<struts> 

<constant name="struts.enable.DynamicMethodInvocation" 
    value="false" /> 
<constant name="struts.devMode" value="false" /> 
<constant name="struts.custom.i18n.resources" 
    value="ApplicationResources" /> 

<package name="default" extends="struts-default" namespace="/"> 
    <!-- at this point redirect is mapped to login page --> 
    <action name="index"> 
    <result>/login.jsp</result> 
    </action> 

    <action name="login" 
     class="com.pkg.action.LoginAction" method="execute"> 
     <result name="success">/regform.jsp</result> 
     <result name="error">/login.jsp</result> 
    </action> 

<action name="register" 
     class="com.pkg.action.LoginAction" method="register"> 
     <result name="success1">success.jsp</result> 
     <result name="input">regform.jsp</result> 
    </action> 

</package> 

et le reste du code et de validation sont les mêmes que de @Viral Patel