0

从 h:outText 呈现的带有 escape="false" 的内容未绑定到适用于该页面的 css 或 javascript。实际上,我正在尝试使用语法荧光笔在帖子中突出显示我的语法。该帖子存储在数据库中,并通过将转义属性设置为 false 将其显示在带有 h:outputText 标记的 JSF 页面中。它按预期呈现页面,并处理所有 html 标记,但不应用适用于该帖子中代码块的 css 或 javascript。下面是我的 jsf 页面,它从数据库中检索 html 并通过 h:outputText 标记显示它。检索到的内容具有需要突出显示的语法。

   <ui:composition xmlns="http://www.w3.org/1999/xhtml"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:p="http://primefaces.org/ui"
        template="/templates/ui.xhtml">

 <ui:define name="head">
    <title>tekBytes-#{tutorialController.tut.title}</title>

<h:outputScript library="primefaces" name="jquery/jquery.js" />
<link href="/rainbow/themes/pastie.css" rel="stylesheet" type="text/css" />
<script src="/rainbow/rainbow.min.js"></script>
<script src="/rainbow/language/generic.js"></script>
<script src="/rainbow/language/java.js"></script>
<script src="/rainbow/language/css.js"></script>
  <script type = "text/javascript">
/*
 * do some jQuery magic on load
 */
$(document).ready(function() {
    function showHiddenParagraphs() {
        $("pre.hidden").fadeIn(500);
    }
    setTimeout(showHiddenParagraphs, 1000);
});

</script>
  </ui:define>
  <ui:define name="content">
  <div style="margin:20px">
  <h1>#{tutorialController.tut.title}</h1>
  <br/>
  <h:outputText value="#{tutorialController.tut.contentStr}" escape="false"/>
  </div>
  </ui:define>
</ui:composition>
4

3 回答 3

0

在 JSF 2.0 中,您的所有 Web 资源文件(如 css、图像或 JavaScript)都应放在 Web 应用程序根目录下的“resources”文件夹中(与“WEB-INF”文件夹级别相同)。

将您的 js / css 放入resources/jsandresources/css文件夹并使用 and 访问<h:outputStylesheet它们<h:outputScript

像这样

<h:outputScript name="js/rainbow.min.js" />

<h:outputStylesheet name="css/language/css.js" />

等等...


另请阅读:JSF 2.0 中的资源(库)

于 2013-03-17T09:20:42.720 回答
0

我解决了。实际问题是存储在数据库中的 html 是通过 p:editor 生成的,它在每一行周围放置了很多 div 标签,所以当它通过 h:outputText 标签呈现时,css 或 javascript 无法解析代码块由于被包围的 div 和其他标签,它们适用于语法突出显示。所以我已经删除了所有这些不必要的标签,然后再将它们存储到数据库中。感谢大家的回复。

于 2013-03-17T22:49:25.000 回答
0

潜在问题可能出在此处,请按顺序验证以下内容。

    1) Check your CSS files are getting loaded by the browser 
by monitoring the request in developer tools on Firefox or chrome.

   https://developers.google.com/chrome-developer-tools/docs/overview?hl=fr

    2) check the source of your html to see if that looks 
fine and tags are not encoded etc. 

    3) verify your CSS to see it works and it doesn't have missing semicolon,
 brackets,quotes etc by adding it to a test html page on your machine.
于 2013-03-17T14:52:09.027 回答