Panelgrid内部的复合组件未“膨胀”

问题描述

| 基本上,我在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:message中重复。 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是一个组件。在使用复合组件之前,一行中有2个组件,分别是outputLabel和panelGroup。 在这种情况下是否可以将复合组件暗示为'expand \'本身,以使其占据2列而不是我的panelGrid中的1列? 谢谢 !     

解决方法

        不,不幸的是没有。最好的选择是创建一个简单的标记文件。 也可以看看: 如何制作一个JSF复合组件网格?