如果您定义“FTS 条件”并将过滤器设置为该屏幕的默认值,您可以按照与任何其他条件相同的方式预设条件参数的值:通过在过滤器的 UI 中找到参数名称并setParamValue()
在代码:
public class CustomerBrowse extends AbstractLookup {
@Inject
private Filter filter;
@WindowParam
private String searchTerm;
@Override
public void ready() {
if (!Strings.isNullOrEmpty(searchTerm))
filter.setParamValue("fts56832", searchTerm);
}
}
如果你有defaultMode="fts"
,即过滤器默认在 FTS 模式下,只有一个参数,它会更复杂。显示搜索词的组件没有公共 API,因此您必须FilterDelegateImpl
在项目中覆盖并访问ftsSearchCriteriaField
受保护的字段。我认为最简单的方法是覆盖该setParamValue()
方法:
package com.company.sample.web.filter;
import com.haulmont.cuba.gui.components.filter.FilterDelegateImpl;
public class SampleFilterDelegate extends FilterDelegateImpl {
public static final String FTS_SEARCH_TERM = "_FTS_SEARCH_TERM_";
@Override
public void setParamValue(String paramName, Object value) {
if (paramName.equals(FTS_SEARCH_TERM) && ftsSearchCriteriaField != null) {
ftsSearchCriteriaField.setValue(value);
searchBtn.action.actionPerform(); //to run the search
} else {
super.setParamValue(paramName, value);
}
}
}
该类必须注册web-spring.xml
为原型 bean:
<bean id="cuba_FilterDelegate"
scope="prototype"
class="com.company.sample.web.filter.SampleFilterDelegate"/>
然后您可以按照与上述相同的方式设置初始值,但传递预定义的参数名称:
public class CustomerBrowse extends AbstractLookup {
@Inject
private Filter filter;
@WindowParam
private String searchTerm;
@Override
public void ready() {
if (!Strings.isNullOrEmpty(searchTerm))
filter.setParamValue(SampleFilterDelegate.FTS_SEARCH_TERM, searchTerm);
}
}