【问题标题】:pre tag with h:outputtext带有 h:outputtext 的 pre 标记
【发布时间】:2013-10-16 21:15:38
【问题描述】:

是否可以在 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方法内容只是显示为文本。

【问题讨论】:

  • 只是一个疯狂的猜测:escape="false"&lt;h:outputText&gt; 有帮助吗?
  • 尝试使用 escape="false",但没有任何变化。仍然显示为纯文本
  • 对我来说它就像在你的第一个代码块中一样工作。您是否比较了两种方法的 html 输出?你像我一样使用js脚本吗?请提供更多代码(支持 bean、facelets)
  • 您不能在 JSF 的视图页面中添加代码,这是从旧的 scriptlet 时代中获取的。要显示结果,只需将方法放在服务器端并从outputText 调用它。
  • Lester,现在 escape="false" 有效。首先,我在主页上尝试过。然后我尝试在弹出窗口(对话框)中显示方法内容。在对话框中,语法突出显示、新行和制表符空间工作正常。谢谢你的建议.. :)

标签: html jsf pre


【解决方案1】:

当然有可能。在这种特殊情况下,甚至不需要转义,因为示例中的输出不包含任何 HTML 特殊字符,例如&lt;&gt; 等。而且,它肯定会造成麻烦(XSS 攻击漏洞等) ) 当输出包含它们时。您的问题是在其他地方引起的。很可能您只是在错误的时刻执行了语法高亮脚本。例如。 之前 &lt;pre&gt; 标签在 HTML DOM 树中声明:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 2011-07-19
    • 2010-12-21
    • 2012-01-14
    • 1970-01-01
    • 2012-07-01
    • 2013-02-10
    相关资源
    最近更新 更多