【问题标题】:Sorting is not working in Primefaces datatable排序在 Primefaces 数据表中不起作用
【发布时间】:2012-01-04 09:25:58
【问题描述】:

排序在 Primefaces 数据表中不起作用。显示了我的 jsf 代码。我们需要在支持 bean 中做任何事情以使其正常工作吗?

<p:dataTable id="employees" value="#{employeeList.employees}"
     var="employee" emptyMessage="No Employees found" rows="10"
     paginator="true"
     paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink}  {PageLinks}      {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
     rowsPerPageTemplate="5,10,15" rowIndexVar="rowIndex">

        <p:column sortBy="#{employee.firstName}">
           <f:facet name="header">
           <h:outputText value="First Name" />
           </f:facet>
           <h:outputText value="#{employee.firstName}">
           </h:outputText>
        </p:column>
            <p:column sortBy="#{employee.lastName}">
           <f:facet name="header">
           <h:outputText value="Last Name" />
           </f:facet>
           <h:outputText value="#{employee.lastName}" />
        </p:column>
    </p:dataTable>

我的 Primefaces 版本是 3.0.M3,带有 JSF2 和 Google Cloud SQL

EmployeeList.java:

public List<Employee> getEmployees() throws HibernateException, SQLException {
        List<Employee> employees = new ArrayList<Employee>();
        employees.addAll(empList());
}

我在 empList() 中的哪个位置编写了用于检索所有员工并返回所有员工的查询。

EmployeeList.java

@Component("employeeList")
@SessionScoped
@Repository
public class newb implements Serializable {
    private static final long serialVersionUID = -2417394435764260084L;


    public static HibernateTemplate hibernateTemplate;

    @Autowired
    public void setSessionFactory(SessionFactory sessionFactory)
    {       
        this.hibernateTemplate = new HibernateTemplate(sessionFactory);     
    }

    public List<Employee> getEmployees() throws HibernateException, SQLException {

        List<Employee> employees = new ArrayList<Employee>();       
        employees.addAll(empList());        
        return employees;
    }


    @SuppressWarnings("unchecked")
    public List<Employee> empList() {       
        try
        {           
            List <Employee> result =  hibernateTemplate.find("from Employee"); 
            return result;
        }
        finally { 
            //close the session and user-supplied JDBC connection 
        }

    }

}

【问题讨论】:

  • 如果您尝试点击排序按钮会发生什么?
  • 您的&lt;p:dataTable&gt; 标签是否在&lt;h:form&gt; 中?
  • 点击排序箭头/列标题时,对信息没有影响。
  • 是的,在&lt;h:form prependId="false"&gt;
  • 我在 GlassFish 3.1 上使用 PrimeFaces 3.0.M3 编译您的代码并且工作正常。

标签: java google-app-engine jsf-2 primefaces


【解决方案1】:

如果您在 get 中填充了列表,它将不起作用。如果每次都在 get 中填充列表,则对主要面孔进行排序将不起作用。而是尝试使 bean 具有视图范围并在构造函数中填充列表,它应该可以工作。

【讨论】:

  • 如果我们使用 CDI bean 会怎样?
【解决方案2】:

试试这个:

private List<Employee> employees = new ArrayList<Employee>();

public List<Employee> getEmployees() {
    if(employees.isEmpty()){
       employees.addAll(empList());
    }
    return employees;
}

【讨论】:

  • employees.addAll(empList());在构造函数中时会导致空指针异常。
  • ` 无法实例化 bean 类 [com.fetchinglife.application.modules.employee.view.EmployeeList]:构造函数抛出异常;嵌套异常是 java.lang.NullPointerException`
  • 显示完整的 EmployeeList 类。
  • 当我按照您所说的将List&lt;Employee&gt; employees = new ArrayList&lt;Employee&gt;();getEmployees 替换为顶部时,列表项会重复,并且控制台显示程序连续运行而不会停止,后来出现类似cannot open connection 的错误。
  • 这很奇怪,因为当员工为空时,您只调用一次 empList()。
猜你喜欢
  • 1970-01-01
  • 2019-04-29
  • 2011-06-28
  • 2014-07-19
  • 1970-01-01
  • 2013-12-01
  • 2012-11-19
  • 2014-11-02
  • 2013-02-16
相关资源
最近更新 更多