【问题标题】:jsf 2 composite component problem when use f:facetjsf 2 使用 f:facet 时的复合组件问题
【发布时间】:2010-01-28 14:04:30
【问题描述】:

我是 JSF 的新手,所以我遇到了很多问题。我已经解决了很多,但是现在我在制作column的复合组件时遇到了问题。

这是代码:

myPage.xhtml:

<h:dataTable  > 
    <util:myCol />
</h:dataTable>

myCol.xhtml:

<composite:interface>
</composite:interface> 
<composite:implementation>
    <h:column>
        <f:facet name="header" >
           <h:outputText value="user name" />
        </f:facet>
        <h:outputText value="some data" />
    </h:column>
</composite:implementation>

问题是列不渲染。

所以我对代码做了一点改动:

myPage.xhtml:

<h:dataTable  > 
    <h:column>
        <util:myCol />
    </h:column>
</h:dataTable>

myCol.xhtml:

<composite:interface>
</composite:interface> 
<composite:implementation>
    <f:facet name="header" >
        <h:outputText value="user name" />
    </f:facet>
    <h:outputText value="some data" />
</composite:implementation>

此处列呈现,但标题“用户名”没有出现。

如何解决问题?提前致谢。

【问题讨论】:

标签: jsf jakarta-ee


【解决方案1】:

案例 1:

dataTable 仅将 column 控件 children 视为列。您正在向dataTable 添加一个复合控件,并向该复合控件添加一个column。

案例 2:

问题可能与刻面的设置位置有关。这些设置在父控件上的 map 上。您要添加header facet 的控件是复合控件,而不是column。

注意:这些链接指向 JSF 1.2 (JEE5) 的东西,但原则仍然适用。

【讨论】:

  • 非常感谢,但我不明白必须做什么才能通过使用带有 facet 的 cloumn 复合组件来使我的应用程序工作......
  • 您可能必须使用&lt;composite:interface componentType="... 属性。您指定的控件可能必须是UIColumn 类型并符合此属性指定的规则(例如NamingContainer)。由于没有这样的组件,因此您必须编写一个。详细信息在 JSF 规范中。
  • 你在“既然没有这样的组件,你必须写一个”中的意思......我阅读了规范,我找到了 UIColumn 。请给我一个关于制作复合列的明确例子..谢谢你,我很抱歉我的问题
  • 我的意思是没有类是 UIColumn 并且实现 NamingContainer 并且在 faces-config.xml。也就是说,public class MyColumn extends UIColumn implements NamingContainer { ...java.sun.com/javaee/5/docs/tutorial/doc/bnavg.html(在这种情况下,您不需要定义任何标记 - 只需 Java 类和配置描述符。)
【解决方案2】:

我不知道你是否仍然关注这个帖子,但由于一个错误,我们在插入构面时遇到了问题。 以评论开始构面内的内容(服务器端评论 )可能会解决显示内容的问题。我们遇到了其中有一个衬里的方面的问题。在第一个语句中添加一个额外的注释是该问题的解决方法。

亲切的问候, 吉斯

【讨论】:

    【解决方案3】:

    当您将所有 JSF 放在一个页面上时,它是否正确呈现?首先在单个页面上设置 JSF 有助于确保基础知识正确;完成后,您可以将其分解为复合组件。

    另外,我注意到(使用 JSF 和 Richfaces)有时您无法区分“父母”和“孩子”;例如,一个rich:toolBar 和它的rich:toolBarGroup 需要在同一个实际页面上。我没有经常使用 Facelets,所以您可能会有不同的情况。

    祝你好运。

    编辑:

    尝试将标题拉出复合控件,即:

    <h:dataTable  > 
        <h:column>
            *HEADER_FACET_GOES_HERE*
            <util:myCol />
        </h:column>
    </h:dataTable>
    

    【讨论】:

    • 谢谢我尝试,当我将所有代码放在一个页面中时工作正常,但分开时同样的问题...帮助我:(
    • 我修改了我的答案,我认为我给出的例子现在应该对你有用。
    【解决方案4】:

    在接口中使用composite:facet,在实现中使用composite:renderFacet或composite:insertFacet。

    <composite:interface>
        <composite:facet name="foo"/>
        <composite:attribute name="value"/>
    </composite:interface>
    <composite:implementation>
        <h:inputText id="value" value="#{cc.attrs.value}"/>
        <composite:renderFacet name="foo"/>
        <composite:insertChildren/>
    </composite:implementation>
    

    【讨论】:

      猜你喜欢
      • 2011-09-14
      • 2011-09-28
      • 2012-09-03
      • 2013-11-10
      • 2011-07-28
      • 1970-01-01
      • 2012-04-08
      • 2011-12-10
      • 2012-06-22
      相关资源
      最近更新 更多