We have a data table with 3 columns, the first has a selectBooleanCheckbox and the two last have outputText.
我们有一个包含3列的数据表,第一列有selectBooleanCheckbox,最后两列有outputText。
We also set up a filter on this table to show or hide rows depending on the filter boolean value.
我们还在此表上设置了一个过滤器,以根据过滤器布尔值显示或隐藏行。
The entity used for the data table is made with these 3 columns properties, 1 boolean, 2 String. See below.
用于数据表的实体由这3个列属性组成,1个布尔值,2个字符串。见下文。
The problem is, when we select a filter in the first column such as "Yes" and click the update button, the table will be updated but the filter is not applied thus the table filter is not refreshed.
问题是,当我们在第一列中选择过滤器(例如“是”)并单击更新按钮时,将更新该表,但不应用过滤器,因此不会刷新表过滤器。
Step to reproduce:
重现步骤:
- Load the page, don't modify any checkboxes
- Select the filter "Yes"
- Press update button
- The datatable is not updated
加载页面,不要修改任何复选框
选择过滤器“是”
按更新按钮
数据表未更新
This is my Entity.java
这是我的Entity.java
public class Entity {
boolean enabled;
private String label;
private String description;
public Entity(boolean enabled, String label, String description) {
this.enabled = enabled;
this.label = label;
this.description = description;
}
public boolean getEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
This is my simple bean
这是我的简单豆子
import java.util.ArrayList;
import java.util.List;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
@Controller
@Scope ("view")
public class TestBean {
private List<Entity> list;
public TestBean() {
list = new ArrayList<Entity>();
/* Populate examples */
list.add(new Entity(true, "Book", "This is a C book"));
list.add(new Entity(false, "Screen", "21\" HP Screen"));
list.add(new Entity(true, "Game", "You won 1 million"));
}
/*
* Update list, in the real application it is a little bit more complicated
* but I simplified it and the problem is reproducible for this stuff too.
*/
public void update() {
Entity entity;
/* "Disable" the third because we didn't win */
entity = list.get(2);
entity.setEnabled(false);
}
public List<Entity> getList() {
return list;
}
public void setList(List<Entity> list) {
this.list = list;
}
}
This is my little bean for the filter boolean value
这是我的过滤器布尔值的小豆
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
/**
* The Class BooleanListBean.
*/
@Controller
@Scope ("session")
@SuppressWarnings ("serial")
public class BooleanListBean implements Serializable {
/**
* Instantiates a new boolean list bean.
*/
public BooleanListBean() {
super();
}
/**
* Gets the options.
*
* @return the options
*/
public SelectItem[] getOptions() {
final List<SelectItem> options = new ArrayList<SelectItem>();
final FacesContext facesContext = FacesContext.getCurrentInstance();
options.add(new SelectItem("", "Select"));
options.add(new SelectItem(Boolean.FALSE.toString(), "No"));
options.add(new SelectItem(Boolean.TRUE.toString(), "Yes"));
return options.toArray(new SelectItem[0]);
}
}
And finally the xhtml file
最后是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:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:fn="http://java.sun.com/jsp/jstl/functions"
xmlns:p="http://primefaces.org/ui"
xmlns:ft="http://primefaces.prime.com.tr/facestrace"
xmlns:t="http://myfaces.apache.org/tomahawk"
xmlns:util="http://java.sun.com/jsf/composite/components/util">
<ui:composition template="/xhtml/common/toolbarLayout.xhtml">
<ui:define name="content">
<p:commandButton value="Update"
actionListener="#{testBean.update}"
update=":contentForm:entityList" />
<p:dataTable value="#{testBean.list}" var="entity" id="entityList" widgetVar="entityList">
<p:column headerText="Activated"
filterBy="#{entity.enabled}" filterOptions="#{booleanListBean.options}">
<h:selectBooleanCheckbox value="#{entity.enabled}" />
</p:column>
<p:column headerText="Label">
<h:outputText value="#{entity.label}" />
</p:column>
<p:column headerText="Description">
<h:outputText value="#{entity.description}" />
</p:column>
</p:dataTable>
</ui:define>
</ui:composition>
</html>
1 个解决方案
#1
0
I think dataTable should have filtered Value tag,
我认为dataTable应该有过滤的Value标签,
filteredValue="#{testBean.filteredList}"
Add a filter list in testBean and refer it.
在testBean中添加一个过滤器列表并引用它。
#1
0
I think dataTable should have filtered Value tag,
我认为dataTable应该有过滤的Value标签,
filteredValue="#{testBean.filteredList}"
Add a filter list in testBean and refer it.
在testBean中添加一个过滤器列表并引用它。