h:输入

时间:2016-10-19 09:55:25

标签: jsf composite-component

我经常遇到有关复合材料组件行为的问题/未知问题,因为它们被用作价值持有者(带有输入)。总而言之,我有一个以下列方式声明的复合组件:

<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 />的行为模仿为独立组件本身。如果这是不可能的,或者我误解了复合组件的目的,那么我很乐意接受。

1 个答案:

答案 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}" />