如何在嵌套复合组件中使用Ajax?

时间:2012-10-16 18:26:05

标签: ajax jsf jsf-2 composite-component

我有一个问题是ajaxify嵌套复合组件。我正在以下列方式使用它们。 (我试图尽可能地减少这个例子!)

基本复合组件 base.xhtml

<composite:interface>
    <composite:clientBehavior name="update" event="click" targets="#{cc.clientId}:form:submit" default="true"/>
</composite:interface>

<composite:implementation>
    <h:form id="form">
        // ... some basic content
        <h:commandButton type="submit" id="submit" value="update"/>
    </h:form>   
</composite:implementation>

复合组件 reuse.xhtml ,它重用第一个复合组件

<composite:interface>
    <composite:clientBehavior name="update" event="update" targets="#{cc.clientId}:test" default="true"/>
</composite:interface>

<composite:implementation>
    <my:base id="test">
        <composite:insertChildren />
    </my:base>
</composite:implementation>

使用这些组件

// Ajax works and method "void update(javax.faces.event.AjaxBehaviorEvent)" is exeuted
<my:base>
    <f:ajax event="update" listener="#{controller.update}" render=":some-components"/>
</my:base>

// Ajax doesn't work, so nothing is executed, page reloads according to form submit
<my:reuse>
    <f:ajax event="update" listener="#{controller.update}" render=":some-components" />
</my:reuse>

我的问题主要位于reuse.xhtml内,因为我不知道在<composite:clientBehavior targets="???">中应该使用哪个目标来激活基本组件中的commandButton以及应该使用哪个事件。我还尝试在<composite:clientBehavior name="update" event="click" targets="#{cc.clientId}:test:form:submit" default="true"/>的声明中通过reuse.xhtml在基本组件中定位commandButton,但没有任何成功。

0 个答案:

没有答案