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

时间:2011-06-22 03:42:36

标签: jsf jsf-2

基本上,我一直在面板网格中一次又一次地使用这种模式:

<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的标签值和 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是一个组件。在使用复合组件之前,一行中有两个组件,即outputLabel和panelGroup。

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

谢谢!

1 个答案:

答案 0 :(得分:2)

不,不幸的是没有。最好的办法是创建一个简单的标记文件。

另见: