0

是否可以在 h:outputtext 周围有一个 pre 标签,如下所示?

<pre class="prettyprint lang-java">

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

</pre>

我需要在我的 html 页面中显示 java 方法的内容。我尝试直接在我的 pre 标记中提供一些示例 java 方法,如下所示,它工作正常。

<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 回答