【问题标题】:Pre-set the fts search condition in browse-screen by using screen parameter使用screen参数在browse-screen中预设fts搜索条件
【发布时间】:2018-02-22 08:35:10
【问题描述】:

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

我有什么可能这样做?

【问题讨论】:

    标签: cuba-platform


    【解决方案1】:

    如果您定义“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);
        }
    }   
    

    【讨论】:

      猜你喜欢
      • 2014-05-03
      • 2020-05-16
      • 1970-01-01
      • 2012-03-30
      • 2023-01-30
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 2023-02-12
      相关资源
      最近更新 更多