Primefaces数据表与CDI Bean不分页

时间:2015-08-18 21:41:58

标签: jsf-2 primefaces datatable cdi commandlink

美好的一天。我有一个CDI Bean,其中包含从另一个xhtml调用的Conversation范围,用于加载数据表的xhtml。这个数据表有分页(不使用延迟加载,只是简单的分页),表加载数据没有问题。但是当我点击某个页面或箭头来更改页面时,它会显示“找不到记录”。这些是文件。

我的CDI Bean,PaisManagedBean:

package com.saplic.fut.beans;

import java.io.Serializable;
import java.util.List;

import javax.enterprise.context.ConversationScoped;
import javax.faces.event.ActionEvent;
import javax.inject.Inject;
import javax.inject.Named;

import com.saplic.fut.daos.CiudadDAO;
import com.saplic.fut.entity.Ciudad;

@Named("paisMB")
@ConversationScoped
public class PaisManagedBean implements Serializable {

    private static final long serialVersionUID = -203436251219946811L;

    @Inject
    private CiudadDAO ciudadDAO;

    private List<Ciudad> ciudades;
    private Integer idCity;

    public String loadCities() {
        ciudades = ciudadDAO.cargarCiudades();
        return "listaCiudades";
    }

    public void loadCityInfo(ActionEvent e) {
        System.out.println("The ID is " + getIdCity());
        return;
    }   

    public List<Ciudad> getCiudades() {
        return ciudades;
    }

    public void setCiudades(List<Ciudad> ciudades) {
        this.ciudades = ciudades;
    }

    public Integer getIdCity() {
        return idCity;
    }

    public void setIdCity(Integer idCity) {
        this.idCity = idCity;
    }

}

然后,这个xhtml是我的索引。从这里我只需要调用paisMB.loadCities()并登陆我的数据表:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"> 

<ui:composition template="/plantilla/template.xhtml">
    <ui:define name="contenido">
    <h:form>
        <p:commandButton action="#{paisMB.loadCities()}"
        value="Show cities" />
    </h:form>
    </ui:define>
 </ui:composition>
</html>

最后是我有数据表的xhtml,listaCiudades.xhtml:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"> 

<ui:composition template="/plantilla/template.xhtml">

    <ui:define name="contenido">
    <h:form id="frm1">

        <p:dataTable id="tablita" resizableColumns="true" rowIndexVar="rowIdx"
        paginator="true" rows="10" paginatorPosition="bottom" value="#{paisMB.ciudades}"
        var="ciu" >
            <p:column headerText="Código pais">
                <p:outputLabel value="#{ciu.codigoPais}" />
            </p:column>
            <p:column headerText="Distrito">
                <p:outputLabel value="#{ciu.distrito}" />
            </p:column>
            <p:column headerText="Nombre">
                <p:outputLabel value="#{ciu.nombre}" />
            </p:column>
            <p:column headerText="Población">
                <p:outputLabel value="#{ciu.poblacion}" />
            </p:column>
            <p:column headerText="Accion">
                <p:commandLink actionListener="#{paisMB.loadCityInfo()}" ajax="false" process="frm1" value="Detail">
                    <f:setPropertyActionListener value="#{ciu.id}" target="#{paisMB.idCity}" />
                </p:commandLink>
            </p:column>
        </p:dataTable>
    </h:form>
    </ui:define>
 </ui:composition>
</html>

我尝试改为@SessionScoped而不是@ConversationScoped并且它有效,看起来它忽略了@ConversationScoped,因为当我调试并监视getCiudades()getter时,当我点击页面时,ciudades为null。它失去了价值。

此外,我的数据表中的commandLink不起作用。它不会调用我的方法paisMB.loadCityInfo()。我尝试使用action而不是actionListener,并从方法中删除参数但它不起作用。

发生了什么事?

0 个答案:

没有答案