Вопрос
Я создал композитный компонент 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}"/>
Когда этот компонент отображается в браузере, идентификатор имеет формат «Именное значение: firstName».
<input type="text" value="" name="firstName:firstName" id="firstName:firstName" gtbfieldid="3028">
Это стандартная конвенция именования с шаблонами JSF 2.0? Я не получил это с шаблонами Facelets JSF 1.2. Есть ли способ генерировать удостоверение личности как просто «имя» вместо «Именного имени: firstName»
Решение
Композиционный компонент JSF 2.0 не совпадает с шаблоном Facelets JSF 1.x / 2.x.
Композитный компонент имеет свой собственный идентификатор. Вы в основном используете его на компонентах в реализации композитного компонента. Вы можете рассмотреть возможность добавления или переименования другого атрибута ID для компонентов в реализации. Например
<my:inputText name="firstName" label="First Name" value="#{nameTO.firstName}" />
с участием
<h:inputText id="#{cc.attrs.name}">
Однако это будет в конечном итоге id="ccId:firstName"
В HTML где ccId
является либо фиксированным или аутогенерацией id
из my:inputText
. Отказ Вы также можете просто оставить его и использовать
<h:inputText id="input">
Который заканчивается как id="firstName:input"
в HTML.