0

以下に示すように、h:outputtext を pre タグで囲むことは可能ですか?

<pre class="prettyprint lang-java">

  <h:outputText value="#{maintainBusinessProcessBean.featureCodeAssistContent}">   
  </h:outputText>

</pre>

HTML ページに Java メソッドのコンテンツを表示する必要があります。以下に示すように、サンプルのJavaメソッドをpreタグに直接指定してみましたが、問題なく動作します。

<pre class="prettyprint lang-java">

  public int getResult(int a, int b){
      return a+b;
  }
</pre>

一方、h:outputtext に文字列と同じメソッドを指定し、それを pre タグで囲むと、書式設定や構文の強調表示は行われません。Java メソッドの内容はテキストとして表示されるだけです。

4

1 に答える 1

1

確かにそれは可能です。<この例の出力には、などの HTML 特殊文字が含まれていないため、この特定のケースではエスケープは必要ありません>。さらに、出力にそれらが含まれていると、間違いなく問題 (XSS 攻撃の穴など) が発生します。 . あなたの問題は他の場所で発生しています。ほとんどの場合、間違ったタイミングで構文強調表示スクリプトを実行しているだけです。たとえば、タグが HTML DOM ツリーで宣言される前:<pre>

<h:outputScript>prettyPrint();</h:outputScript>
<pre class="prettyprint lang-java">#{maintainBusinessProcessBean.featureCodeAssistContent}</pre>

ウィンドウのロード中に実行する必要があります

<h:outputScript>window.onload = prettyPrint;</h:outputScript>
<pre class="prettyprint lang-java">#{maintainBusinessProcessBean.featureCodeAssistContent}</pre>

または少なくとも本体の最後に

<pre class="prettyprint lang-java">#{maintainBusinessProcessBean.featureCodeAssistContent}</pre>
<h:outputScript>prettyPrint();</h:outputScript>

また

<h:outputScript target="body">prettyPrint();</h:outputScript>
<pre class="prettyprint lang-java">#{maintainBusinessProcessBean.featureCodeAssistContent}</pre>
于 2013-10-30T11:20:21.807 に答える