我决定问这里,这样我就能解决我的问题。在我写信给你之前,我可以向你保证,我在谷歌搜索了很多,但没有找到答案。
在我的PRIMEFACES中,p:DataTable中p:Column中的sortBy和filterBy不起作用。
让我们从SortBy开始。()在我尝试的所有版本中,如您在下面的pom.xml中所看到的:6.2,7.0,7.0.rc3,8.0,8.0.rc3中所示,它都有这样的行为:它显示列headerText,带有两个向上/向下箭头。当我点击箭头时,他们不会改变“向上”,之后是“向下”。而且显然没有进行排序。()只有在下面的pom.xml:6.0、6.1中看到的版本中,它才有这种行为:它显示列headerText,带有两个向上/向下箭头。当我点击箭头时,它们会在“向下”之后改变“向上”。但仍然没有进行排序。
在一些帖子中他们说,我必须先应用过滤,并对过滤后的列表进行排序。我试着用过滤器...没有过滤,也没有排序...神奇的是,滤镜在前面提到的所有版本中都不起作用……
在下面我写我用过的所有文件...我使用Spring MVC 5.2.1(Spring beans)、Hibernate 5.4.3/JPA、JSF 2.2.20、PrimeFaces。我试图重现“PrimeFaces Showcase/DataTable/sorting”的示例。
-----------pom.xml------------
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.2.20</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.2.20</version>
</dependency>
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>8.0.RC3</version>
<!-- <version>8.0</version> -->
<!-- <version>7.0</version> -->
<!-- <version>7.0.RC3</version> -->
<!-- <version>6.0</version> -->
<!-- <version>6.1</version> -->
<!-- <version>6.2</version> -->
</dependency>
-----------page_table.xml-----------
<h:form>
<p:dataTable var="car" value="#{sortViewBackingBean.cars}">
<f:facet name="header">
Single Column Sort
</f:facet>
<p:column headerText="Id" sortBy="#{car.id}">
<h:outputText value="#{car.id}"/>
</p:column>
<p:column headerText="Year" sortBy="#{car.year}" filterBy="#{car.year}">
<h:outputText value="#{car.year}"/>
</p:column>
</p:dataTable>
</h:form>
----------汽车模型-------------
public class Car {
private String id;
private String brand;
private int year;
private String color;
private int price;
private boolean soldState;
// Constructors, Getters, Setters
}
-----------汽车服务----------------
@Service(value = "carService")
public class CarService {
private final static String[] colors;
private final static String[] brands;
// Populate colors, brands
public List<Car> createCars(int size) {
List<Car> list = new ArrayList<>();
for (int i = 0; i < size; i++) {
list.add(new Car(getRandomId(), getRandomBrand(), getRandomYear(),
getRandomColor(), getRandomPrice(), getRandomSoldState()));
}
return list;
}
// Other methods
}
-----------汽车服务----------------
----------SortViewBackingBean版本1------------
@Component(value = "sortViewBackingBean")
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
/*
I overrode the Spring way, and I used CDI/JSF way, but it did not work as well
@Named("sortViewBackingBean")
@ManagedBean("sortViewBackingBean")
@ViewScoped
@SessionScoped
*/
public class SortViewBackingBean implements Serializable {
private final List<Car> cars;
private CarService carService;
public SortViewBackingBean(CarService carService) {
this.carService = carService;
// At creation of the bean, the cars is created once only!
cars = this.carService.createCars(10);
}
@PostConstruct
public void init() {
// Or this version, as is in the primefaces showcase
// cars = carService.createCars(10);
}
public List<Car> getCars() {
return cars;
}
public void setService(CarService carService) {
this.carService = carService;
}
}
----------SortViewBackingBean版本2------------
@Component(value = "sortViewBackingBean")
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
public class SortViewBackingBean implements Serializable {
private List<Car> cars;
private CarService carService;
public SortViewBackingBean(CarService carService) {
this.carService = carService;
}
// Or this version I found googling, the cars is created once only!
public List<Car> getCars() {
if (cars == null) {
cars = this.carService.createCars(10);
}
return cars;
}
public void setService(CarService carService) {
this.carService = carService;
}
}
所以,好吧!这些特征在Primefaces工作,或它只是在我只有!有人能帮忙吗?
多谢
根据您的代码:您需要使用比请求更长的作用域,如viewscope或sessionscope(不是两者)来保留filteredValue,以便筛选后仍可访问filtered list。例如。
@Named("sortViewBackingBean")
@SessionScoped
如果要对多个列进行排序,则需要通过将sortMode设置为Multiple来启用多重排序。在此模式下,当metakey处于on状态时单击排序列会将排序列添加到order组中。例如。
<p:dataTable var="car" value="#{carBean.cars}" sortMode="multiple">
//columns
</p:dataTable>
我有一个使用apache myfaces 2.0.2的PrimeFaces 3.2数据表。我想要一个初始排序。我的JSF看起来像: 但是我得到一个当我删除其中的sortBy标记时,它工作得很好。 所以我的问题是:如何实现初始排序?
我想对一个dataTable进行排序,该dataTable具有名为“CustomerName”的列,该列需要根据Customer的FirstName和LastName进行排序。因此,我希望将值传递给sortBy属性,如下所示sortBy=“customertable.firstname,customertable.lastname” 当我尝试此操作时,我得到一个解析器错误,说明该字符串 我可以用一
我有一个自定义的dataTable标记,我在所有视图中都使用它,它位于这里:src/main/webapp/WEB-INF/tags/custom\u dataTable。xhtml 我的问题是,如果我对一个或多个可过滤列进行过滤,并使用dataExporter进行导出,则列过滤会丢失,因此导出会忽略这些额外的过滤。我怎样才能改变这个? 这是自定义datatable标记的源: 我的Primefac
我在数据表外部有一个primefaces commandButton,它可以正常工作。在dataTable中,我有完全相同的commandButton,但当单击dataTable中的commandButton时,它不会调用ActionListener:
我试图在PrimeFaces数据表上实现一个排序函数。我已经创建了一个模型对象列表。我们有一个问题是表的排序顺序。排序列包含整数和字符串值。当我应用等默认排序机制时,列表是基于ASCII顺序排序的。下面是排序结果的图像。我目前正在使用PrimeFaces V5.2.5 谁能指导我如何克服这个问题。
我正在使用Primeface 4.0,我有一个具有多种选择功能的日期表。我愿意实现的是仅通过复选框按钮选择行,禁用单击行的功能。在当前场景中,即使我单击任何行,我也选中了复选框,我想禁用行选择。 我从这个论坛上得到了一些解决方案,但无法解决。请告诉我需要做什么。