为什么复合jsf标签不会在ajax调用上调用侦听器?

时间:2014-08-06 00:25:45

标签: ajax jsf primefaces composite-component

我最近将一些代码从视图移动到复合jsf标记,以使我的代码更清晰,但只是意识到ajax调用不再有效。

浏览器进行更新,我可以看到数据显示,但该方法不会被称为全部。

我将以下代码作为标记:

<composite:interface> 
 <composite:attribute name="viewBean" type="org.example.view.RegistroMunicipalView" required="true" />
</composite:interface>

<composite:implementation>
 <saimTags:dataFlag viewBean="#{cc.attrs.viewBean}"/>
  <p:selectOneMenu  styleClass="source_select" value="#{cc.attrs.viewBean}" >
      <f:selectItems value="#{cc.attrs.viewBean.registros}" var="registro" 
                     itemValue="#{registro.idRegistro}"
                     itemLabel="#{registro.nombre}"></f:selectItems>
      <p:ajax listener="#{cc.attrs.viewBean.registroChanged()}" oncomplete="checkForData()" update="@(.section_content)"/>

   </p:selectOneMenu>
</composite:implementation>

这个作为要调用方法的类:

public abstract class RegistroMunicipalView extends MunicipalView {
 private Integer idRegistro;
 public abstract void registroChanged();
}

并且像这样执行标签

<saimTags:displayRegistro viewBean="#{informacionMunicipalView}"/>

任何可能出错的线索?

1 个答案:

答案 0 :(得分:0)

它是由于selectOneMenu中的属性值错误导致的, 它指向bean而不是属性idRegistro,导致静默失败,通过此更改,现在可以正确调用该方法。

在:

<p:selectOneMenu  styleClass="source_select" value="#{cc.attrs.viewBean}" >

后:

<p:selectOneMenu  styleClass="source_select" value="#{cc.attrs.viewBean.idRegistro}" >