panelgrid 内的复合组件未“扩展”

Posted

技术标签:

【中文标题】panelgrid 内的复合组件未“扩展”【英文标题】:a composite component inside panelgrid is not 'expanded' 【发布时间】:2011-09-20 01:12:49 【问题描述】:

基本上,我在 panelgrid 中一次又一次地使用这种模式:

<h:panelGrid columns="2" >
    <h:outputLabel for="heroName" value="Hero Name : " />
    <h:panelGroup>
        <h:inputText label="Hero Name : "
            value="#ccBean.data.map['heroName']" id="heroName" />
        <p:message for="heroName" />
    </h:panelGroup>
    ...
</h:panelGrid>

我注意到我重复了很多东西,比如 h:inputText 中的 id,它将在 for="idValue" 中为 outputLabel 再次复制,然后在 p 中再次复制:消息。 inputText 的 label 值和 h:outputLabel 值也会发生同样的情况。

所以,我正在考虑制作一个简单的复合组件来包装它们:

<composite:interface>
    <composite:attribute name="id" required="true" />
    <composite:attribute name="label" required="true" />
    <composite:attribute name="value" required="true" />
    <composite:attribute name="includeLabel" required="false" default="false"/>
</composite:interface>

<composite:implementation>
    <h:outputLabel for="#cc.attrs.id" value="#cc.attrs.label" 
            render="#cc.attrs.includeLabel" />
    <h:panelGroup>
        <h:inputText label="#cc.attrs.label"
            value="#cc.attrs.value" id="#cc.attrs.id" />
        <p:message for="#cc.attrs.id" />
    </h:panelGroup>
</composite:implementation>

然后我使用复合组件:

<h:panelGrid columns="2" >
    <s:inputText
        id="heroName"
        label="Hero Name : "
        value="#ccBean.data.map['heroName']"
            includeLabel="true"
    />
    <s:inputText
        id="heroName2"
        label="Hero Name 2 : "
        value="#ccBean.data.map['heroName2']"
            includeLabel="true"
    />
    ...
</h:panelGrid>

该复合组件工作正常,但 panelGrid 现在假定 s:inputText 是一个组件。使用复合组件之前,一行有2个组件,分别是outputLabel和panelGroup。

在这种情况下是否可以提示复合组件“扩展”自身,以便它在我的 panelGrid 中占用 2 列而不是 1 列?

谢谢!

【问题讨论】:

【参考方案1】:

不,很遗憾没有。最好的办法是创建一个简单的标签文件。

另见:

How to make a grid of JSF composite component?

【讨论】:

以上是关于panelgrid 内的复合组件未“扩展”的主要内容,如果未能解决你的问题,请参考以下文章

对齐 panelGrid 列内的内容

EL作为属性传递给数据表内的复合组件时未解析

jsf 2.0 自定义组件/标签不复合

复合组件参数在ui:repeat var属性时不会计算

如何将多个组件放在h:panelGrid的单个单元格中

为什么复合组件中的构面内的commandLink会出现错误?