如果根据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
带有签名的 - 方法。void update(AjaxBehaviorEvent e)
希望任何人都可以识别错误!
更新
我的问题是我h:panelGroup
使用 JSTL 标记c:forEach
和c:if
. 如果我省略这些标签并插入一个静态复合组件,则ajaxListener
可以触发 -attribute 中的侦听器方法并且正确发送 ajax 请求。上面描述的方法无论如何都不起作用。
更新第 2 版
也许任何人都可以解释为什么 ajax 监听器没有正确绑定?!
提前致谢!