1
我希望在primefaces 3.2的tabview的每个选项卡中显示2个不同的数据表。 那里的datatables将基于onChange事件中设置的'type'变量来获取数据。但我的问题是onChange事件根本不会触发。 请检查我TabView的代码来检查为什么发生这种情况:primefaces tabview onChange not fired
<h:form id="frm">
<p:tabView activeIndex="#{equityBean.activeIndex}">
<p:ajax event="tabChange" listener="#{equityBean.onChange}" update=":frm"/>
<p:tab title="NSE" binding="#{equityBean.tbn}">
<p:dataTable binding="#{equityBean.dt}" value="#{equityBean.scripList}" var="scrip">
<f:facet name="header">
Scrip Symbol
</f:facet>
<h:outputText value="#{scrip.scripSymbol}"/>
<f:facet name="header">
Company Name
</f:facet>
<h:outputText value="#{scrip.companyName}"/>
<f:facet name="header">
Volume
</f:facet>
<h:outputText value="#{scrip.totalTradedVolume}"/>
</p:dataTable>
</p:tab>
<p:tab title="BSE" binding="#{equityBean.tb}">
</p:tab>
</p:tabView>
</h:form>
豆:
public void onChange(TabChangeEvent event) {
type=event.getTab().getTitle();
}
编辑: 豆代码来获取数据表值:
public List<MasterScrip> getScripList() {
scripList=new ArrayList<MasterScrip>();
scripList=getScripByVolumeType(type);
return scripList;
}
private java.util.List<service.MasterScrip> getScripByVolumeType(java.lang.String type) {
service.StatelessWebService port = service.getStatelessWebServicePort();
return port.getScripByVolumeType(type);
}
编辑:jpa查询
public Collection<MasterScrip> getScripByVolumeType(String type)
{ Collection sm = null;
sm=em.createQuery("select m from MasterScrip m where m.type = :type order by m.totalTradedVolume").setParameter("type", type).setMaxResults(2).getResultList(); // retuens no records
return sm;
}
返回的记录,但不显示..
为什么会发生这种情况?我在哪里错了?
这样做(编辑问题)仍然无法正常工作,我调试并发现该事件从未执行过,取而代之的是获取数据表值(正在编辑)并持续获取它,导致无限调试循环 – z22
每次EL表达式被评估时你都应该调用getter(你应该*现在*的头上有灯泡,这说明它确实是一个[坏主意])(http://stackoverflow.com/questions/2090033/why- jsf-calls-getters-multiple-times/2090062#2090062)在getter方法中执行业务逻辑!)。但这与您的标签更改问题无关。或者,如果您完全删除了“”,它会得到解决吗?顺便说一下,我发现那些“绑定”属性是可疑的。毕竟,如果他们确实造成了具体问题,我不会感到惊讶。 –
BalusC
hanks BalusC!我走到了永无止境的getter循环的末端(是的,在getter中编写代码真的是个不好的主意)jpa查询正在返回记录,但记录不会显示在数据表中... – z22