带有h:outputtext的pre标签

时间:2013-10-16 21:15:38

标签: jsf pre

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

<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方法内容只显示为文本。

1 个答案:

答案 0 :(得分: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>