我想将排序添加到PrimeFaces 3.3数据表并创建了以下ViewScoped bean,它存储列表,因此不会一直从EJB中获取:
@Named
@ViewScoped
public class CustomerList implements Serializable {
private static final long serialVersionUID = 6168621124401208753L;
@EJB
CustomerEJB customerBean;
List<Customer> allCustomers = null;
public void loadCustomerList() {
allCustomers = customerBean.findAll();
}
public List<Customer> getList() {
if (allCustomers == null) {
loadCustomerList();
}
return allCustomers;
}
}
这是使用bean的视图:
<ui:composition template="/WEB-INF/templates/template.xhtml">
<ui:define name="content">
<h:form id="customerList">
<p:dataTable id="customer" var="customer"
value="#{customerList.list}" sortBy="#{customer.id}"
paginator="true" rows="10" paginatorAlwaysVisible="false"
paginatorPosition="top">
<p:column sortBy="#{customer.id}">
<f:facet name="header">
<h:outputText value="#{msg.customerIdLabel}" />
</f:facet>
<h:outputText value="#{customer.id}" />
</p:column>
<p:column sortBy="#{customer.lastName}">
<f:facet name="header">
<h:outputText value="#{msg.customerLastNameLabel}" />
</f:facet>
<h:outputText value="#{customer.lastName}" />
</p:column>
问题是,我可以单击列标题进行排序,但表仍然未排序,即使初始排序不起作用。当您在getList()方法中设置断点时,我可以看到在处理请求期间多次从EJB中提取列表。只要视图在ViewScope中处于活动状态,不应该存储bean吗?
您需要使用这个注释Bean组合:
对于@ManagedBean,您需要使用@ViewScoped
对于@Named (CDI),您需要使用@ConversationScoped
CDI中不支持@ViewScoped
,因此,如果需要在CDI中使用@viewsoped
,您应该
@ViewScoped
将在CDI中工作。MyFaces CODI对@ViewScope@viewAccessScope
,它是Apache在CDI之上编写的一个扩展,只需下载它并使用@ViewAccessScoped
注释,而不是@ViewScoped>/code>
使用CDI<code>@ConversationScope<code>并使其长时间运行。有关更多信息,请参见此处
不幸的是,seam3解决方案存在内存泄漏问题,因此不要使用seam3来解决此特殊问题,更好的解决方案是CODI
@ViewAccessScoped
。
请参阅: 使用ViewScoped豆进行内存泄漏?
首先,与您的问题没有直接关系,但是:您永远不应该将您的业务方法放入组件getter中(即使使用空检查,我认为这是一种不好的做法)。改用@PostConstruct注释:
@PostConstruct
public void loadCustomerList() {
allCustomers = customerBean.findAll();
}
public List<Customer> getList() {
return allCustomers;
}
每次构造ViewScoped bean时,都会调用loadCustomerList。此外,检查导入的范围注释:
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
最后,您的类应该是这样的:
@ViewScoped
@ManagedBean
public class CustomerList implements Serializable {
...
}
当xhtml运行时,数据表会显示出来,但只有一列显示为可用于排序(即,标题中有向上/向下箭头图标)。 dataTable有两个问题: 只有一列(年份)显示为可用于排序。(Year是Car类中“int”类型的属性,而其他三列是String类型,因此问题的一个方面是String字段忽略了sortby=“#{Car.xxx}”标记。) 年份列实际上是不可排序的。点击年份标题的向上/向下箭头没有效果。当点
我目前正在使用带有Spring Data commons 1.9.1和Spring JPA 1.7.1的JpaSort。我需要使用QueryDSL,因为JPA不允许为空值定义排序。 这是我的存储库 我在我的控制器中这样做: 这就是我对JPA的看法: 这是我为QueryDSL更改的内容: 然而,似乎什么都没有得到整理。我已经启用了调试日志记录,我看到了这一点: 如果我将其更改为: 然后,按我的“数据
我开始在我的项目中使用primefaces,我马上就遇到了问题。我有一个列表,其中包含一些我用实体管理器从数据库中获取的东西,我在primefaces数据表的视图中显示了它。在我的后台bean中,我有:List getList(),在这里我使用实体管理器从数据库中检索记录,并立即返回。。 和myService: 我的豆子: 视图: 这种方式primefaces排序不起作用,我在堆栈上的某个地方读到
在我的应用程序中,我使用全局过滤器搜索Primefaces数据表中的记录,并在同一数据表上应用了DataExporter。 当我搜索任何记录并进行导出时,它会返回给我一个完整的数据列表,而不是过滤列表。 我的开发环境是:java 6.0、Primefaces 3.2、JSF2.1、GlassFish Server 3.1.2、Netbeans 7.1.1 登记在我的dataTable和dataEx
我正在用PrimeFaces3.5、JasperReports5.2和JSF2.x开发一个应用程序。我的旧应用程序中有一些报告页面是由JasperReports4.5和JSF1.2编写的。所有这些报表页都在旧应用程序中工作。我试图在我的新应用程序中转移那些报告页。在新的应用程序中一切正常,但报告不能导出,我没有得到任何错误。我是不是漏掉了什么? 下面是我的代码,它在我的旧JSF1.2应用程序中工作
我使用的是PrimeFaces 2.2和JSF 2.0.3。 我有一个包含以下数据表的xhtml视图: ..具有以下背衬豆: 注意母亲姓名列上的“commandLink”和出生日期列上的“sortBy”。 我遇到了一个奇怪的问题,似乎仅限于IE,如果我按DOB对数据进行排序,然后分页到最后一页并单击表中最后一条记录的commandLink,它会触发两个action事件。第一个事件正确地报告了我单击