复合组件的问题

时间:2012-09-27 20:09:40

标签: ajax jsf jsf-2 composite-component ajax4jsf

如果根据ajaxify复合组件读取了很多条目,并且找不到我的错误,这导致没有发送ajax请求。也许任何人都可以找到它。

声明component.xhtml的复合组件看起来像     

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:composite="http://java.sun.com/jsf/composite"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets">

<composite:interface componentType="myComponentType">
    <composite:attribute name="ajaxListener" method-signature="void listener(javax.faces.event.AjaxBehaviorEvent)" required="false"/>
    <composite:clientBehavior name="update" event="click" targets="#{cc.clientId}:submit"/>
</composite:interface>

<composite:implementation>
    <h:form id="form" prependId="false">
        <h:panelGroup layout="block" id="#{cc.clientId}-body">
            <h:commandButton type="submit" id="submit" value="Send"/>
        </h:panelGroup>
    </h:form>
</composite:implementation>

</html>

我以下列方式使用此组件

<h:panelGroup id="viewport" layout="block" binding="#{controller.viewport}">
    ... 
    <c:forEach items="#{controller.elements}" var="element">

        <my:component id="#{element.id}">
            <f:ajax event="update" listener="#{controller.update}" render="@form"/>
        </my:component>

        ... rendering some different components by element.type what requires JSTL c:forEach/c:if

    </c:forEach>
</h:panelGroup>

我的问题是,当单击submit按钮但页面重新加载时,FireBug不会捕获ajax请求。所以ajax事件没有正确绑定到提交按钮。

我第一次尝试在复合组件内声明f:ajax。因此我使用属性ajaxListener。这有效,但不会触发带有签名update的{​​{1}} - 方法。

希望任何人都能发现错误!


更新

我的问题是我使用JSTL标记void update(AjaxBehaviorEvent e)h:panelGroupc:forEach内渲染复合组件的方式。如果省略这些标记并插入静态复合组件,则可以触发c:if - 属性中的侦听器方法,并正确发送ajax请求。无论如何,上述方法都不起作用。

更新第2版

也许有人可以解释为什么ajax监听器没有正确绑定?!

提前致谢!

0 个答案:

没有答案