2010-09-14 14 views
0

Pourquoi Oracle ADF n'échappe-t-il pas aux guillemets lorsque je crée des chaînes en Javascript?Pourquoi Oracle ADF n'échappe pas aux devis lorsque j'utilise <h: outputText />?

<jsp:root ...> 
<f:view ...> 
    <afh:html> 
    <f:loadBundle basename="message" var="msg"/> 
    <afh:head ...> 
    <script> 
    function validate() { 
     var errorMessages = ''; 
     . 
     . 
     if (regNum == '') { 
     errorMessages = errorMessages + '<h:outputText value='#{msg['getDetails.validate.regNum']}"/>' + '\r\n'; 
     } 
     . 
     . 

Dans mon fichier de ressources de message que j'ai quelque chose comme

getDetails.validate.regNum=I'd enter the registration number if I were you. 

Le texte réel est est en irlandais avec des caractères accentués et je peux voir que les caractères accentués se sont échappés, mais pas le caractère de citation.

Répondre

3

Parce que les guillemets simples ne sont pas illégaux en HTML.

Mais ils sont en JS. Vous pouvez utiliser fn:replace() pour leur échapper.

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 
... 
<script> 
    var foo = '<h:outputText value="#{fn:replace(msg['getDetails.validate.regNum'], "'", "\'")}"/>'; 
2
<h:outputText value='#{msg['getDetails.validate.regNum']}"/> 

Le but de la outputText composant JSF est d'émettre des données de caractère (il peut émettre un élément portant le titre span, par exemple). Bien que la forme exacte émise par son moteur de rendu soit un détail d'implémentation, rien dans sa spécification ne suggère qu'il convient à l'encodage littéral de chaîne de caractères d'attribut ou JavaScript.

Le contenu du texte sera généralement émis par les méthodes ResponseWriter.writeText. Les guillemets n'ont pas besoin d'être échappés dans les données de caractères.

L'encodage des caractères accentués est soit dû au fait qu'ils ne sont pas présents dans votre encodage de réponse, soit à une implémentation trop prudente ResponseWriter qui protège contre les problèmes de codage. Les caractères de l'ensemble ASCII ne risquent pas d'être échappés de cette manière.