Получить полный префикс для компонента clientId внутри контейнера именования с помощью JSF 2.0

Я обновляю компонент через 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 .

15
задан Tuukka Mustonen 18 August 2010 в 08:54
поделиться

1 ответ

Похоже, вы можете получить доступ к текущему префиксу через неявные объекты языка выражений (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-компонента.

24
ответ дан 1 December 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: