2010-11-24 22 views
0

Mise à jour majeure: en raison de Spring, le validateur est appelé avant que l'appel onSubmit ne se produise. Lorsque aucun bouton radio n'est sélectionné, cela fonctionne correctement. Lorsqu'un bouton radio est sélectionné, les données POST contiennent une variable pour le bouton radio et cela provoque une exception NestedServletException.En JSP, pourquoi mes boutons radio font-ils que onSubmit n'est plus appelé?

Cette variable n'est liée à aucune propriété ou classe. Existe-t-il un moyen "correct" de gérer une telle variable, que ce soit dans JSP ou dans mon code?


J'ai une page JSP, accroché avec le printemps, où l'auditeur onSubmit est plus invoqué après que j'ajouter des boutons radio à la page JSP. Sans les boutons radio, une version nue de la page ressemble à ceci.

<form:form> 
    <fieldset> 
     <input type="submit" value="Submit"/> 
    </fieldset> 
</form:form> 

Cela fonctionne comme prévu. Mon débogueur atteint un point d'arrêt pour onSubmit une fois le bouton d'envoi appuyé. Ensuite, j'ajoute le code suivant pour les boutons radio, qui peuvent être vus ci-dessous.

<form:form> 
    <fieldset> 
     <input type="submit" value="Submit"/> 
    </fieldset> 

    <fieldset class="contentHalfFieldset"><legend>NID</legend> 
     <input type="radio" name="someName" value="value1" /> 
     <input type="radio" name="someName" value="value2" /> 
     <input type="radio" name="someName" value="value3" /> 
    </fieldset> 
</form:form> 

Maintenant, quand je ne sélectionnez aucun bouton radio, le bouton d'envoi provoque toujours l'événement de soumission pour atteindre le point d'arrêt dans la méthode onSubmit. Cela fonctionne toujours comme prévu. Toutefois, lorsque je sélectionne l'un des boutons radio et que j'appuie sur le bouton Soumettre, la page est simplement actualisée.

Pourquoi est-ce? Qu'est-ce qui se passe qui fait que les boutons d'entrée empêchent le traitement d'une soumission?

------- ------- HTML généré

<form id="cmd" method="post" action="/page/pageAction.html?param=k" onsubmit="disableSubmit(this);"> 
    <fieldset class="contentHalfFieldset"><legend>NID</legend> 
     <label class="labelClass">First radio button:</label> 
     <input type="radio" name="nidStatus" value="first" /><br style="clear: both"/> 
     <label class="labelClass">Second radion button:</label> 
     <input type="radio" name="nidStatus" value="second" /><br style="clear: both"/> 
     <label class="labelClass">Third radio button</label> 
     <input type="radio" name="nidStatus" value="third" /><br style="clear: both"/> 
    </fieldset> 

</form> 

------- ------- Plus du Code a demandé

C'est la méthode disableSubmit (..).

function disableSubmit(parentElement) { 
    elements = parentElement.elements; 

    for(var i = 0; i < elements.length; i++) { 
     var element = elements[i]; 

     if(element.type == "submit") { 
      element.disabled=true; 
      element.value="Please Wait..."; 
     } 
    } 
}; 
+0

est votre "onSubmit()" méthode peut-être un contrôleur Spring-MVC? Si oui, est-ce que vous mappez un requestMethod spécifique (peut-être obtenir) à votre mehtod onSubmit()? – DwB

+0

En fait, j'ai appris et je me suis adapté à tout ce que ce projet était déjà construit, excusez donc ma terminologie. ce n'est pas la même chose que d'apprendre et de construire le projet. Je peux très bien utiliser "Spring-MVC" comme technologie. J'utilise certainement Spring, et j'ai été capable de lier des variables dans le passé sous la forme de . Si c'est Spring-MVC, alors je l'utilise. Avec ce que j'ai fourni ci-dessus, cependant, je penserais que les étiquettes ne l'affecteraient pas comme ceci.Essaie-t-il de compresser les valeurs d'une manière qui brise l'appel onSubmit? – Danny

+0

Partagez également le code HTML généré. –

Répondre

0

Spring essaie de lier vos variables si elles se trouvent être nommé la même chose que vos commandes (dans mon cas, le bouton radio). En fonction de votre code pour gérer la variable. que vous ne souhaitez pas lier, une exception peut se produire avant que la méthode onSubmit soit atteinte.

Dans mon cas, j'avais une classe qui avait une variable "nidStatus", d'un type enum. Lorsque la variable "US & nidStatus" (voir les commentaires en réponse à Michael Kopinsky) a été envoyée dans l'action POST, il y a eu une tentative automatique de lier ceci. Il est intéressant de noter que la validation s'est bien passée avant que l'exception ne soit lancée, donc - si vous avez trouvé cette question malgré une inscription inacceptable - assurez-vous de vérifier votre variable errors dans votre méthode validate(), car le gestionnaire continuera ce point comme si les choses vont bien.