问题描述
|
基本上,我在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复合组件网格?