JSF 2 - передача параметров через системные события - PullRequest
1 голос
/ 24 августа 2010

У меня есть составной компонент, где я передаю произвольно определенный атрибут:

<x:mycomp x="..."/>

x определяется как таковое в определении интерфейса cc.Внутри реализации mycomp у меня есть прослушиватель событий:

<composite:implementation>
    <f:event type="preRenderComponent" listener="#{mycontroller.init}" />
</composite:implementation>

Теперь я хотел бы сделать что-то на сервере с этим произвольным параметром x.как передать его через системное событие, как с тегом f:attribute?или получение исходного компонента из события и просмотр его внутренних элементов?(Говоря о том, где в UIComponent эти атрибуты хранятся в любом случае - я не смог их найти, во всяком случае, в атрибутах.)Если вы поместите компонент в ui:repeat, слушатель будет запущен несколько раз, поэтому он будет проходить по дереву во время запуска события.

Единственное, о чем я могу думать, это закодировать init непосредственно в рендер:1016 *

<composite:implementation>
    #{mycontroller.init(cc.attrs.x)} //returns empty string
    <!--f:event type="preRenderComponent" listener="#{mycontroller.init}" /-->
</composite:implementation>

Но я подумал, что для этого и будет системное событие prerender.

1 Ответ

1 голос
/ 29 января 2011

Возможно, уже немного поздно для ответа.

Я сделал доказательство того, что, по моему мнению, является проблемой, которую вы пытаетесь решить.Чтобы сделать это, вы должны пройти регистрацию на событие и сделать это на странице использования вашего композита.Ваш метод init может получить ComponentSystemEvent, который даст вам составной компонент, а затем вы можете получить доступ к своему атрибуту 'x' из карты атрибутов компонента.

Код на странице использования выглядит примерно так:

<x:mycomp x="hola">
<f:event type="preRenderComponent" listener="#{bean.init}"/>
</x:mycomp>

И код Java:

public class MyBean {
   private String value;

   public void init(ComponentSystemEvent e){
       System.out.println("x: "+e.getComponent().getAttributes().get("x"));
   }

}

Надеюсь, это будет полезно (несколько месяцевпозже).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...