代码之家  ›  专栏  ›  技术社区  ›  Brian Matthews

当我使用<h:outputtext/>时,为什么Oracle ADF不为我转义引号?

  •  0
  • Brian Matthews  · 技术社区  · 14 年前

    当我使用javascript构建字符串时,为什么Oracle ADF不为我转义引号?

    <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';
          }
          .
          .
    

    在我的消息资源文件中,我有一些

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

    真正的文本是爱尔兰语,带有重音字符,我可以看到重音字符被转义,但不是引号字符。

    2 回复  |  直到 14 年前
        1
  •  3
  •   BalusC    14 年前

    因为单引号在HTML中不是非法的。

    但他们是在JS。你可以用 fn:replace() 为了逃避他们。

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

    的意图 outputText JSF组件将发出字符数据(它可以发出样式化的 span 例如,元素)。尽管它的渲染器所提交的确切形式是一个实现细节,但它的规范中没有任何内容表明它适合于属性或javascript字符串文本编码。

    文本内容通常由 ResponseWriter.writeText 方法。引号不需要在字符数据中转义。

    重音字符的编码要么是由于它们在响应编码中不存在,要么是过于谨慎。 ResponseWriter 防止编码问题的实现。ASCII集中的字符不太可能以这种方式转义。