Java 更改smartGWT中的过滤标准
我正在开发一个smartGWT应用程序,我想以一种不同于默认方式的方式过滤listGrid字段(即,默认过滤是基于对包含匹配项的清除) 更为痉挛的是,我举一个例子: 如果一个字段有两个值,一个是单词“valid”,另一个是单词“invalid”,那么过滤可以正确地搜索单词invalid,但是当我想看到“valid”时,它会给我所有的“valid”和“invalid”单词,因为“invalid”由“in”+“valid”组成 和其他领域一样 这是我填写记录的方式:Java 更改smartGWT中的过滤标准,java,gwt,filtering,smartgwt,Java,Gwt,Filtering,Smartgwt,我正在开发一个smartGWT应用程序,我想以一种不同于默认方式的方式过滤listGrid字段(即,默认过滤是基于对包含匹配项的清除) 更为痉挛的是,我举一个例子: 如果一个字段有两个值,一个是单词“valid”,另一个是单词“invalid”,那么过滤可以正确地搜索单词invalid,但是当我想看到“valid”时,它会给我所有的“valid”和“invalid”单词,因为“invalid”由“in”+“valid”组成 和其他领域一样 这是我填写记录的方式: registeredUsersR
registeredUsersRecords = new ListGridRecord[registeredUsers.length()];
ListGridRecord record = new ListGridRecord();
record.setAttribute(ID, user.getId());
record.setAttribute("firstName", user.getFirstName());
record.setAttribute("lastName", user.getLastName());
record.setAttribute("email", user.getEmail());
record.setAttribute("userMainType", type);
record.setAttribute("isActivated", (user.isActivated())? voc.active(): voc.inActive());
record.setAttribute("country", user.getSelectedCountry().getValue());
record.setAttribute("companyName", user.getCompanyName());
record.setAttribute("registrationDate", user.getRegistrationDate());
record.setAttribute("lastVerificationDate", user.getVerificationDate());
registeredUsersRecords[i] = record;
然后我将它们放入数据源:
DataSource ds = new DataSource();
ds.setClientOnly(true);
ds.setFields(fName, lName, email, type,typeDetails, status, country, companyName, registeredDate,verificationDate);
for(int i = 0; i< registeredUsersRecords.length; i++){
ds.addData(registeredUsersRecords[i]);
}
registeredUsersListGrid.setDataSource(ds);
registeredUsersListGrid.fetchData();
DataSource ds=newdatasource();
ds.setClientOnly(true);
设置字段(fName、lName、email、type、typeDetails、status、country、companyName、registeredDate、verificationDate);
for(int i=0;i
我想这会解决你的问题。
我已经在这里发布了你最后一个问题的示例代码 您必须对其进行一些修改,如下所示: 注意:在下面的示例代码中,我已将过滤条件运算符从
ICONTAINS
替换为start\u。根据您的要求进行修改
--编辑--
完整代码:
class User {
private int id;
private String firstName;
private Date registrationDate;
public User(int id, String firstName, Date registrationDate) {
this.id = id;
this.firstName = firstName;
this.registrationDate = registrationDate;
}
public int getId() {
return id;
}
public String getFirstName() {
return firstName;
}
public Date getRegistrationDate() {
return registrationDate;
}
}
DateTimeFormat format = DateTimeFormat.getFormat("MM/dd/yyyy");
User[] registeredUsers = new User[] { new User(1, "valid", format.parse("01/20/2014")),
new User(2, "invalid", format.parse("05/20/2013")),
new User(3, "valid", format.parse("02/20/2014")) };
ListGridRecord[] registeredUsersRecords = new ListGridRecord[registeredUsers.length];
for (int i = 0; i < registeredUsers.length; i++) {
User user = registeredUsers[i];
ListGridRecord record = new ListGridRecord();
record.setAttribute("id", user.getId());
record.setAttribute("firstName", user.getFirstName());
record.setAttribute("registrationDate", user.getRegistrationDate());
registeredUsersRecords[i] = record;
}
DataSourceDateField registeredDate = new DataSourceDateField("registrationDate", "Date");
DataSourceTextField firstName = new DataSourceTextField("firstName", "Name");
DataSourceIntegerField id = new DataSourceIntegerField("id", "ID");
id.setRequired(true);
id.setPrimaryKey(true);
id.setHidden(true);
DataSource ds = new DataSource();
ds.setClientOnly(true);
ds.setFields(id, firstName, registeredDate);
for (int i = 0; i < registeredUsersRecords.length; i++) {
ds.addData(registeredUsersRecords[i]);
}
final ListGrid registeredUsersListGrid = new ListGrid();
registeredUsersListGrid.setDataSource(ds);
registeredUsersListGrid.fetchData();
registeredUsersListGrid.setShowFilterEditor(true);
registeredUsersListGrid.addFilterEditorSubmitHandler(new FilterEditorSubmitHandler() {
@Override
public void onFilterEditorSubmit(FilterEditorSubmitEvent event) {
event.cancel();
if (event.getCriteria() != null) {
AdvancedCriteria advancedCriteria = event.getCriteria().asAdvancedCriteria();
// store only single criteria for each field(column)
Map<String, Criterion> criterions = new HashMap<String, Criterion>();
for (final Criterion criterion : advancedCriteria.getCriteria()) {
System.out.println(criterion.getFieldName());
System.out.println(criterion.getValueAsString());
System.out.println(criterion.getOperator());
if (criterion.getOperator() == OperatorId.ICONTAINS) {
Criterion newCritearia = new Criterion(criterion.getFieldName(),
OperatorId.STARTS_WITH, criterion.getValueAsString());
criterions.put(criterion.getFieldName(), newCritearia);
} else {
criterions.put(criterion.getFieldName(), criterion);
}
}
if (criterions.size() > 0) {
AdvancedCriteria filterCriteria = new AdvancedCriteria(OperatorId.AND,
criterions.values().toArray(new Criterion[] {}));
registeredUsersListGrid.fetchData(filterCriteria);
}
}
}
});
Button button = new Button("Clear all filters");
button.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
registeredUsersListGrid.fetchData();
}
});
VLayout layout = new VLayout();
layout.setWidth("200px");
layout.setHeight("200px");
layout.addMember(button);
layout.addMember(registeredUsersListGrid);
layout.draw();
类用户{
私有int-id;
私有字符串名;
私人日期注册日期;
公共用户(int-id,String-firstName,Date-registrationDate){
this.id=id;
this.firstName=firstName;
this.registrationDate=注册日期;
}
公共int getId(){
返回id;
}
公共字符串getFirstName(){
返回名字;
}
公共日期getRegistrationDate(){
返回注册日期;
}
}
DateTimeFormat格式=DateTimeFormat.getFormat(“MM/dd/yyyy”);
User[]registeredUsers=新用户[]{新用户(1,“有效”,format.parse(“01/20/2014”),
新用户(2,“无效”,格式解析(“05/20/2013”),
新用户(3,“有效”,format.parse(“02/20/2014”)};
ListGridRecord[]RegisteredUserRecords=新ListGridRecord[registeredUsers.length];
for(int i=0;i0){
AdvancedCriteria筛选器准则=新的AdvancedCriteria(运算符ID和,
criterions.values().toArray(新标准[]{});
RegisteredUserListGrid.fetchData(filterCriteria);
}
}
}
});
按钮按钮=新按钮(“清除所有过滤器”);
addClickHandler(新的ClickHandler(){
@凌驾
公共作废一次点击(点击事件){
RegisteredUserListGrid.fetchData();
}
});
VLayout布局=新VLayout();
布局。设置宽度(“200px”);
布局。设置高度(“200px”);
布局。添加成员(按钮);
layout.addMember(RegisteredUserListGrid);
layout.draw();
没有,它有漏洞,我不知道如何处理。请告诉我你在说什么漏洞,以便我能解决它。thanx出于您的兴趣,当我填充过滤器并按inter键时,列表网格中没有数据,我会在一分钟内列出调试控制台上打印了什么?我在代码中添加了一些SOP来检查应用的标准
class User {
private int id;
private String firstName;
private Date registrationDate;
public User(int id, String firstName, Date registrationDate) {
this.id = id;
this.firstName = firstName;
this.registrationDate = registrationDate;
}
public int getId() {
return id;
}
public String getFirstName() {
return firstName;
}
public Date getRegistrationDate() {
return registrationDate;
}
}
DateTimeFormat format = DateTimeFormat.getFormat("MM/dd/yyyy");
User[] registeredUsers = new User[] { new User(1, "valid", format.parse("01/20/2014")),
new User(2, "invalid", format.parse("05/20/2013")),
new User(3, "valid", format.parse("02/20/2014")) };
ListGridRecord[] registeredUsersRecords = new ListGridRecord[registeredUsers.length];
for (int i = 0; i < registeredUsers.length; i++) {
User user = registeredUsers[i];
ListGridRecord record = new ListGridRecord();
record.setAttribute("id", user.getId());
record.setAttribute("firstName", user.getFirstName());
record.setAttribute("registrationDate", user.getRegistrationDate());
registeredUsersRecords[i] = record;
}
DataSourceDateField registeredDate = new DataSourceDateField("registrationDate", "Date");
DataSourceTextField firstName = new DataSourceTextField("firstName", "Name");
DataSourceIntegerField id = new DataSourceIntegerField("id", "ID");
id.setRequired(true);
id.setPrimaryKey(true);
id.setHidden(true);
DataSource ds = new DataSource();
ds.setClientOnly(true);
ds.setFields(id, firstName, registeredDate);
for (int i = 0; i < registeredUsersRecords.length; i++) {
ds.addData(registeredUsersRecords[i]);
}
final ListGrid registeredUsersListGrid = new ListGrid();
registeredUsersListGrid.setDataSource(ds);
registeredUsersListGrid.fetchData();
registeredUsersListGrid.setShowFilterEditor(true);
registeredUsersListGrid.addFilterEditorSubmitHandler(new FilterEditorSubmitHandler() {
@Override
public void onFilterEditorSubmit(FilterEditorSubmitEvent event) {
event.cancel();
if (event.getCriteria() != null) {
AdvancedCriteria advancedCriteria = event.getCriteria().asAdvancedCriteria();
// store only single criteria for each field(column)
Map<String, Criterion> criterions = new HashMap<String, Criterion>();
for (final Criterion criterion : advancedCriteria.getCriteria()) {
System.out.println(criterion.getFieldName());
System.out.println(criterion.getValueAsString());
System.out.println(criterion.getOperator());
if (criterion.getOperator() == OperatorId.ICONTAINS) {
Criterion newCritearia = new Criterion(criterion.getFieldName(),
OperatorId.STARTS_WITH, criterion.getValueAsString());
criterions.put(criterion.getFieldName(), newCritearia);
} else {
criterions.put(criterion.getFieldName(), criterion);
}
}
if (criterions.size() > 0) {
AdvancedCriteria filterCriteria = new AdvancedCriteria(OperatorId.AND,
criterions.values().toArray(new Criterion[] {}));
registeredUsersListGrid.fetchData(filterCriteria);
}
}
}
});
Button button = new Button("Clear all filters");
button.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
registeredUsersListGrid.fetchData();
}
});
VLayout layout = new VLayout();
layout.setWidth("200px");
layout.setHeight("200px");
layout.addMember(button);
layout.addMember(registeredUsersListGrid);
layout.draw();