0

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.

実際のテキストはアイルランド語でアクセント付き文字が使用されており、アクセント付き文字はエスケープされますが、引用文字はエスケープされていないことがわかります。

4

2 に答える 2

3

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'], "'", "\'")}"/>';
于 2010-09-14T17:39:53.443 に答える
2
<h:outputText value='#{msg['getDetails.validate.regNum']}"/>

outputText JSFコンポーネントの目的は、文字データを出力することです(spanたとえば、スタイル付き要素を出力できます)。レンダラーによって発行される正確な形式は実装の詳細ですが、その仕様には、属性またはJavaScript文字列リテラルのエンコードに適していることを示唆するものはありません。

テキストコンテンツは通常、ResponseWriter.writeTextメソッドによって出力されます。文字データで引用符をエスケープする必要はありません。

アクセント付き文字のエンコーディングは、応答エンコーディングに存在しないか、エンコーディングの問題を防ぐために過度に慎重なResponseWriter実装が原因です。ASCIIセット内の文字は、この方法でエスケープされる可能性はほとんどありません。

于 2010-09-14T17:30:21.003 に答える