使用screen参数在浏览屏幕中预设fts搜索条件

时间:2018-02-22 08:35:10

标签: cuba-platform

我想打开一个带有预设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)
    }
}

我有什么可能做到这一点?

1 个答案:

答案 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);
    }
}