我想打开一个带有预设fts过滤字符串的浏览屏幕。
我有一个带文本字段的窗口:
openWindow('some-browse-screen', WindowManager.OpenType.NEW_TAB, [ftsSearchString: searchTextField.rawValue])
并且想要使用文本字段中的输入作为浏览屏幕的预设值:
@Inject
Filter filter
@Override
void init(Map<String, Object> params) {
super.init(params)
if (params.ftsSearchString) {
//I need a method like that:
filter.ftsFilterInput.setSearchParam(params.ftsSearchString)
}
}
我有什么可能做到这一点?
答案 0 :(得分:2)
如果定义“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);
}
}