2010-01-28 2 views
1

Gentlepeeps,Au chargement de JSP, modifier de manière sélective la déclaration Jquery aux valeurs d'entrée

Je suis nouveau avec Jquery. Excuses d'avance pour la question de base. J'essaye d'introduire Jquery dans notre environnement struts/jsp. Le code existant est criblé de javascript pur.

J'écris une règle de validation à l'aide du plug-in de validation de JQuery comme ceci:

$("#advanceValidateform").validate({ 
rules: { 
    advanceAmt1: { min: 0, max: 23 }, 
    advanceAmt2: { min: 0, max: 24 }, 
    advanceAmt3: { min: 0, max: 26 } 
    } 

});

Le problème est:

  1. Les valeurs max, min ne peut pas être codé en dur, mais doit venir de ma classe d'action (probablement de la demande). Je le fais généralement en appelant des paramètres dans ma fonction jscript (code scriplet passant les valeurs exactes).
  2. advanceAmt1, 2 et 3 proviennent d'une boucle

Une solution serait de paramétrer le tout, avoir une règle de validation pour advanceAmt avec des paramètres min, max et appeler ce que pour chaque élément d'entrée contenant la « classe ".advanceAmt.

essentiellement I nécessitent la validation jquery à:

  1. course sur tous les éléments avec dire "classe" .advanceAmt
  2. et ramasser les paramètres min, max de la balise d'entrée lui-même, (à partir scriplet je peux générer un min = <% = x%> et max = <% = y%>)

Mais je suis un peu perdu comment faire la même chose avec jquery. Est-ce possible? Si pas de suggestions ou de meilleures alternatives?

Merci d'avance. K

Répondre

2

Sur votre page JSP, vous pouvez utiliser un itérateur JSTL pour parcourir la collection de règles de validation et générer chacune d'elles. Cela n'affecte pas le code javascript, car JSTL évalue sur le serveur et le JavaScript résultant évalue sur le client. Par exemple, supposons que vous ayez une collection de règles de validation appelées validations qui a été créée par votre action.

$("#advanceValidateform").validate({ 
    rules: { 
     <c:forEach var="v" items="${validations}" varStatus="loop"> 
     advanceAmt${v.id}: { min: ${v.min}, max: ${v.max} }${!loop.last ? ',' : ''} 
     </c:forEach> 
    } 
    }); 

Quelques hypothèses - Votre collection de règles de validation contient trois propriétés id, min et max. L'instruction if était nécessaire pour ajouter une virgule entre les règles, mais pas après la dernière.

Espérons que cela aide un peu.

+1

J'ai optimisé votre exemple 'c: forEach' pour profiter de' varStatus';) – BalusC

+0

@BalusC Merci, c'est en fait un très bon usage de varStatus ... Je ne l'ai jamais considéré avant ... seulement utilisé pour colorer différentes lignes, etc. –

+0

Pour d'autres méthodes (utiles), consultez http://java.sun.com/javaee/5/docs/api/javax/servlet/jsp/jstl/core/LoopTagStatus.html – BalusC