我经常遇到有关复合材料组件行为的问题/未知问题,因为它们被用作价值持有者(带有输入)。总而言之,我有一个以下列方式声明的复合组件:
<cc:interface>
<cc:attribute name="value" required="true"/>
</cc:interface>
<cc:implementation>
<h:inputText id="textInput" value="#{cc.attrs.value} />
</cc:implementation>
并使用:
<my:componentWithInput id="foo" value="#{someBean.value} />
我的问题是ID。如果我想用h:message
来定位元素,我不确定我应该遵循什么结构,最终我想要实现的是:
<h:message for="foo" styleClass="error" />
<my:componentWithInput id="foo" value="#{someBean.value} />
我理解给定复合组件是命名容器,这不起作用,因为在这种情况下生成的'foo'的id将解析为复合组件id而不是输入。
我一直在研究cc:editableValueHolder
等,但目前尚不清楚实现这一目标的适当方法。
编辑:为了使我的问题更清楚,我正在寻找一种给组件提供ID的方法,并为它提供包含在此ID中的输入,这样我就可以在外部引用它而无需知道(或实际上通过属性提供)输入本身的ID。换句话说,将<h:inputText />
的行为模仿为独立组件本身。如果这是不可能的,或者我误解了复合组件的目的,那么我很乐意接受。
答案 0 :(得分:-1)
foo
是容器的id
,您可以输入
<h:message for="foo:inputText" styleClass="error" />
编辑:您可以将属性添加到复合组件
<cc:interface>
<cc:attribute name="value" required="true"/>
<cc:attribute name="textId" required="false" default="textInput"/>
</cc:interface>
<cc:implementation>
<h:inputText id="#{cc.attrs.textId}" required="true" value="#{cc.attrs.value}" />
</cc:implementation>
你可以在这里使用
<h:message for="foo:myId" styleClass="error" />
<my:out id="foo" textId="myId" value="#{bean.value}" />