primefaces tabview onChange没有被解雇

时间:2012-05-24 04:53:44

标签: java jsf primefaces

我希望在primefaces 3.2的tabview的每个标签中显示2个不同的数据表。 datatables将根据onChange事件中设置的'type'变量获取数据。但我的问题是onChange事件根本不会触发。 请检查我的tabview代码以检查发生这种情况的原因:

<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();
}

编辑: bean代码获取数据表值:

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)

{        集合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;
   }

记录被返回但未显示..

为什么会这样?我哪里错了?

1 个答案:

答案 0 :(得分:2)

你的错误在这里。

listener="#{equityBean.onChange(event)}"

EL范围中不存在event对象。删除参数。您根本不需要指定它。 JSF将自己提供必要的动作监听器参数。

listener="#{equityBean.onChange}"

所有其他listeneractionListener属性也是如此。只有在action组件的UICommand属性中,您才能指定自定义参数(应该使用实际值传递,而不是使用一些随机和不存在的变量名称)。