Я обновляю компонент через AJAX в JSF:
<h:form>
<h:outputLink>Click me
<f:ajax event="click" render=":messages" />
</h:outputLink>
</h:form>
<h:messages id="messages" globalOnly="true" />
Поскольку
находится за пределами
Мне нужно добавить префикс ID к двоеточию (:
). Это работает.
Однако, если я помещаю этот же код в компонент и включаю этот компонент в мою страницу, код завершается ошибкой. Причина в том, что объявление : messages
ссылается на корень иерархии компонентов, в то время как компонент
, который я хочу обновить, фактически находится в моем пользовательском компоненте, который находится под страницей (поэтому расположение имеет стиль : myComponent: messages
.
Внутри моего компонента, как я могу получить правильный префикс к
компонент? Я знаю, что могу вручную назначить ID своему компоненту и использовать его для префикса ссылки (например, : # {cc.attrs.id}: messages
). Однако я не знаю, на каком уровне иерархии компонентов находится этот компонент, поэтому требуемый префикс может даже быть что-то вроде : foo: bar: x: y: messages
.
Похоже, вы можете получить доступ к текущему префиксу через неявные объекты языка выражений (EL) ( cc
и компонент
):
cc.clientId
возвращает префикс текущего составного компонента component.clientId
возвращает префикс для любого текущего компонента. Например, на странице вызовите какой-либо компонент через
<myComponent id="foo">
Внутри этого компонента можно получить идентификаторы клиентов следующим образом:
<h:outputText id="bar">
<p>ClientId for the composite component: #{cc.clientId}</p>
<p>ClientId for current any component: #{component.clientId}</p>
</h:outputText>
Следующее должно быть распечатано как:
ClientId for the composite component: foo
ClientId for current any component: foo:bar
Я получил указатель из сообщения в блоге JSF: работа с идентификаторами компонентов (id / clientId) . В нем говорится, что это новая функция для JSF 2.0. Раньше нужно было программно получить идентификатор из вспомогательного bean-компонента.