2010-09-05 8 views
1

J'ai JSP simple:

<jsp:directive.attribute name="severity" type="java.lang.String" required="true"/> 
<jsp:directive.attribute name="currentSeverity" type="java.lang.String" required="true"/> 

<c:if test="${severity ne currentSeverity}"> 
    <c:url value="/session" var="url"> 
     <c:param name="severity" value="${severity}"/> 
    </c:url> 
    <li><a href="#" onclick="$.ajax({ 
     type: 'GET', 
     url: '${url}', 
     success: function() { 
      window.location.reload(); 
     } 
    });"><c:out value="${severity}"/></a></li> 
</c:if> 

Mais quand je l'évaluer moteur servlet lancers francs:

org.apache.jasper.JasperException: 
    /WEB-INF/tags/severity-position.tagx(17,9) PWC6287: 
    The attribute prefix success does not correspond to any imported tag library 

D'une manière ou d'une autre, le moteur JSP pense que la chaîne $.ajax({...}); est une expression JSP EL (quels que soient les caractères placés entre $ et {). Lorsque je backslash { ou $ tout va bien, mais mon IDE pense que ce code est cassé code JS. Alors pourquoi le moteur JSP pense-t-il que $.ajax({...}) est l'expression JSP EL?

Répondre

1

Cette apparence ressemble en effet à un bogue dans l'implémentation EL utilisée par le servletcontainer (ou l'application web) en question. Vous devez déterminer lequel il utilise et essayer de le mettre à jour/le remplacer.

Si la mise à niveau/remplacement de la mise en œuvre EL ne fonctionne pas, alors je vous recommande chaudement ce script ne se déplacent tout en en une fonction dans son propre fichier .js que vous chargez à l'aide <script> dans l'élément HTML <head>. C'est aussi la pratique normale. Encore plus, je donnerais au lien un nom de classe de sorte que vous puissiez simplement l'accrocher pendant $(document).ready() et ajouter le click() en conséquence. Par exemple.

<a href="${url}" class="someName"> 

avec

$(document).ready(function() { 
    $('.someName').click(function() { 
     $.ajax({ 
      type: 'GET', 
      url: $(this).attr('href'), // This sets the actual value of ${url}. 
      success: function() { 
       window.location.reload(); 
      } 
     }); 
     return false; // Blocks link from executing the default href action. 
    }); 
}); 
+1

J'utilise la jetée pour le développement. J'ai essayé les implémentations de moteurs JSP Tomcat et Glassfish. Il semble que les deux ont ce problème. Je pense que la séparation des préoccupations est une bonne idée de toute façon, donc j'ai déplacé le code JS du modèle JSP. Merci beaucoup. –

+0

De rien. – BalusC