我在 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="???">
ajaxify 基本组件中的 commandButton 中使用哪个目标以及应该使用哪个事件。我还尝试通过<composite:clientBehavior name="update" event="click" targets="#{cc.clientId}:test:form:submit" default="true"/>
在声明中定位基本组件中的 commandButton reuse.xhtml
,但没有任何成功。