2009-07-08 7 views
3

Est-ce que les balises d'une balise jstl sont considérées comme étant de mauvaise forme? Donc, par exemple, je sais que ce qui suit fonctionnera, mais est-il considéré comme une mauvaise forme d'avoir les balises de script à l'intérieur de mes balises jstl dans mon jsp?JSTL et Javascript

<c:choose> 
    <c:when test="${!empty bean.value}"> 
    <p>Its not empty</p> 
    </c:when> 
    <c:otherwise> 
    **<script> 
     callJSSomeFunction(); 
    </script>** 
    </c:otherwise> 
</c:choose> 

Répondre

4

Je ne sais pas mauvaise forme (un peu sévère) mais vous pourriez considérer que quelqu'un qui consulte votre page sans JS votre permis sera <c:otherwise> rien efficacement la production, et ce n'est pas très gracieux. De plus, si la page est rendue de manière incrémentielle, votre appel de fonction peut s'exécuter comme il a été ouput, et avant que le DOM soit entièrement chargé par le navigateur et se comporte de façon imprévisible (ou ne fonctionne tout simplement pas - j'ai eu cela arrive). Je considérerais mettre toutes les invocations de fonction dans la tête, et utiliser l'un des nombreux trucs disponibles pour détecter quand le DOM a chargé (jQuery's $(document).ready() for example) pour imposer une séparation plus nette, et vous rendre la vie beaucoup plus facile.

2

Je ne pense pas - ce qui est la façon dont vous faites les choses dans certaines conditions JSTL, je ne pense pas que vous devriez avoir une balise de script juste pour avoir un.

1

Je fais face à de gros problèmes de JSTL géants dans le punchbowl en ce moment, alors j'ai pensé que j'allais jeter un peu de perspective dans le mix.

Syntaxe de type SGM entourant un autre domaine de syntaxe SGM est horrible, généralement, mais ce n'est pas de votre faute. Vous pouvez aider à le rendre meilleur en les gardant séparés cependant. Ce n'est pas toujours possible, mais plus vous pouvez définir des variables et les déposer en HTML uniquement lorsque c'est nécessaire, mieux c'est.

L'autre problème est que vous essayez de désactiver les scripts côté client directement avec le code côté serveur et je dirais que oui, compte tenu de mes cinq années d'expérience en matière de code UI, c'est un grand PITA géant pour vos gens de l'interface utilisateur de soudainement se heurter à des déclencheurs, ils ne savent pas vraiment comment revenir à l'origine et n'ont aucun contrôle sur. Enfer, les déclencheurs que même les développeurs Java ne sont pas nécessairement sûr de la façon de revenir à l'origine si les choses sont assez moche. Imaginez être dans nos chaussures. Prenons une architecture axée sur le service, mais ajoutons des chaînes Java dans le mélange de paramètres qui nous permettent d'établir des appels de méthode d'objet du côté client. est-ce une bonne idée? Non, c'est une idée horrible. Pas parce que vous ne voulez pas que les développeurs JavaScript écrivent Java (vous ne le faites pas - cela nous rend vraiment désagréable) mais parce que, à ces deux points de séparation, les choses devraient être aussi simples que possible. Je vous envoie des données, vous pouvez y faire face comme vous le souhaitez.

Alors donnez-nous simplement des données. Idéalement sous forme de JSON mais nous supporterons n'importe quoi pour empêcher que l'exécution de JS soit déterminée par le serveur. La dernière chose que vous voulez est une ruée de sabots UI dans vos pâturages remplis de haricots OOP donc ne nous forcez pas à venir chercher ce que la merde est étroitement lié entre les points de chaque côté du mur HTTP pour aucune raison que jamais eu de bon sens pour moi. Nous emballons des messages autour des roches et les jetons au-dessus du mur. Cela semble inélégant mais aucune solution de «client léger» dans mon expérience n'a jamais causé moins de douleur.

Faites confiance à vos instincts «ick». Parfois, ils ont tort, mais vous devriez comprendre cela sous la douche le matin, quand vous y pensez toujours, parce qu'ils ont habituellement raison.