JSF复合组件ID

时间:2011-01-06 15:01:33

标签: jsf jsf-2

我创建了一个JSF复合组件来扩展h:inputBox

        <p class="label clear">
            <label for="#{cc.attrs.id}" class="">
                #{cc.attrs.label}:
            </label>
        </p>
        <p>
            <h:inputText id="#{cc.attrs.id}" value="#{cc.attrs.value}" 
                size="#{cc.attrs.size}" />
            <ui:fragment rendered="#{cc.attrs.optional eq 'optional'}">
                <span class="optional">Optional</span>
            </ui:fragment>
        </p>

使用此组件..

<my:inputText id="firstName" label="First Name" value="#{nameTO.firstName}"/>

在浏览器上呈现此组件时,ID的格式为“firstName:firstName”。

<input type="text" value="" name="firstName:firstName" id="firstName:firstName" gtbfieldid="3028">

这是JSF 2.0模板的标准命名约定吗?我没有用JSF 1.2 Facelets模板获得这个。 有没有办法生成ID只是“firstName”而不是“firstName:firstName”

1 个答案:

答案 0 :(得分:9)

JSF 2.0复合组件与JSF 1.x / 2.x Facelets模板不同。

复合组件也有自己的ID。您基本上是在复合组件实现中的组件上重用它。您可能需要考虑为实现中的组件添加或重命名另一个ID属性。 E.g。

<my:inputText name="firstName" label="First Name" value="#{nameTO.firstName}" />

<h:inputText id="#{cc.attrs.name}">

然而,它最终会以id="ccId:firstName"格式显示在ccId中,idmy:inputText的固定或自动生成<h:inputText id="input"> 。您也可以将其遗弃并使用

id="firstName:input"

最终以HTML中的{{1}}结束。