我最近将一些代码从视图移动到复合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}"/>
任何可能出错的线索?
答案 0 :(得分:0)
它是由于selectOneMenu中的属性值错误导致的, 它指向bean而不是属性idRegistro,导致静默失败,通过此更改,现在可以正确调用该方法。
在:
<p:selectOneMenu styleClass="source_select" value="#{cc.attrs.viewBean}" >
后:
<p:selectOneMenu styleClass="source_select" value="#{cc.attrs.viewBean.idRegistro}" >