【问题标题】:JSF <f:facet> contents not renderedJSF <f:facet> 内容未呈现
【发布时间】:2014-08-11 19:36:37
【问题描述】:

我有一个页面,我需要在 &lt;f:facet name="last&gt; 中嵌套一些组件,以便应用自定义样式(我使用的是 Primefaces,这是他们处理 CSS 优先级排序的方式,如 here 所述)。但我无法渲染放置在&lt;f:facet&gt; 标签内的任何内容。

这里有一些示例代码:

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:p="http://primefaces.org/ui">
<h:head>
    <title>TODO supply a title</title>
</h:head>
<h:body>
    <div>
        <h:form>
            <h:outputLabel for="loginField" value="Login:" styleClass="form-label"/>
            <p:inputText id="loginField" value="#{subscriptionBean.login}" styleClass="form-field"/>
            <f:facet name="last">
                <h:outputLabel for="pwd2" value="Password:" styleClass="form-label"/>
                <p:password id="pwd2" value="#{subscriptionBean.password}" required="true" match="pwd1" styleClass="form-field"/>
                <p:message for="pwd2" display="text" styleClass="form-field"/>
            </f:facet>
        </h:form>
    </div>        
</h:body>

难道我不能在生成的页面中看到密码输入字段吗?它根本不显示。

按照starf的回答,这里有一些示例代码:

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:p="http://primefaces.org/ui">
<h:head>
    <f:facet name="last">
        <h:outputStylesheet library="css" name="default.css"/>
    </f:facet>
</h:head>

<h:body>
        <h:outputText value="Rendered text!"/>
        <h:form>
            <h:outputLabel for="pdw1" value="Password: "/>
            <p:password id="pwd1" required="true"/>
            <p:message for="pwd1"/>
        </h:form>

</h:body>

以及生成的页面标题:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link type="text/css" rel="stylesheet" href="/AquitelManagement/faces/javax.faces.resource/default.css?ln=css" />
<link type="text/css" rel="stylesheet" href="/AquitelManagement/faces/javax.faces.resource/primefaces.css?ln=primefaces&amp;v=5.0.RC2" />
<script type="text/javascript" src="/AquitelManagement/faces/javax.faces.resource/jquery/jquery.js?ln=primefaces&amp;v=5.0.RC2">    
</script><script type="text/javascript" src="/AquitelManagement/faces/javax.faces.resource/jquery/jquery-plugins.js?ln=primefaces&amp;v=5.0.RC2">
</script>
<script type="text/javascript" src="/AquitelManagement/faces/javax.faces.resource/primefaces.js?ln=primefaces&amp;v=5.0.RC2">
</script>
</head>
<body>...

【问题讨论】:

  • 所以,你的问题本质上是stackoverflow.com/questions/8768317/…的重复?
  • 很抱歉@BalusC,但我不会将其归类为重复项。我试图理解为什么 primeface 的博客中提出的解决方案不起作用。尽管那里提出的解决方法也解决了我的问题,但它们没有回答我的问题。由starf链接的primeface论坛中给出的解释确实如此。
  • 你只是一个XY problem。您遇到了覆盖 PrimeFaces CSS 的问题。您没有询问如何实现这一目标,而是尝试了一些完全错误的事情,并具体询问了为什么这不起作用,而没有详细说明覆盖 PrimeFaces CSS 的初始问题,您错误地认为给定的代码是正确的解决方案。

标签: css jsf jsf-2 primefaces facet


【解决方案1】:

您正在尝试在 h:form 标记上注册一个构面。链接中的示例注册在 h:head 标签上。 Primefaces 有一个自定义的头部渲染器。

没有为表单定义这样的方面,所以它不知道如何处理它。另见<f:facet> not working with <h:form>

我相信您对 CSS 排序问题感到困惑。如果您希望覆盖 PrimeFaces css,请使用头部中的“最后一个”构面 - 这会将您的 css 定义放在 primefaces css 下方。

<h:head>
    <f:facet name="last">
        <h:outputStylesheet library="default" name="css/style.css" />
    </f:facet>
</h:head>

请参阅http://www.mkyong.com/jsf2/primefaces/resource-ordering-in-primefaces/ 以获得很好的解释。

【讨论】:

  • 感谢您的回答!我相信你是对的,我按照建议做了,并将我的 css 链接到 &lt;f:facet name="last"&gt; 内的 &lt;h:head&gt; 标签内。它确实呈现到我的 css 的相对链接,但它在链接到 Primefaces css 文件之前这样做,我希望它是另一种方式,所以我可以使用我的 css,我做错了什么?将使用结果编辑主要帖子。
  • @BrunoPires 似乎这已在 Primefaces 论坛 - forum.primefaces.org/viewtopic.php?f=3&t=25617 中进行了介绍。直接尝试使用 标签,虽然这并不理想。
  • 或者将你的 h:outputStylesheet 标签放在正文中。
猜你喜欢
  • 2014-03-14
  • 2013-11-29
  • 2021-08-12
  • 2013-05-08
  • 1970-01-01
  • 2012-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多