我有一个使用SelectableListTableContentProvider填充表的Web服务,它可以很好地工作。
但是,如果我向表格中添加一个过滤器输入控件,它所做的只是对客户端的当前表格内容进行过滤,即如果我在表格的第1页上的第1页,那么它不会#39 ;去检查所有值,只检查第1页上的值。
如何对Web服务可以返回的所有值创建过滤器输入控件过滤器?
答案 0 :(得分:3)
以下是您的工作方式:
按照SelectableListTableContentProvider
创建(让我们称之为myDataProvider
),并确保所有这些内容在Web服务,提供商和屏幕之间起作用。这是为了防止这里出现错误,然后下一位就不会正常工作。只需确保它看起来正常,正确浏览数据等等。为表格提供一个漂亮的描述性ID。
将筛选器输入控件添加到屏幕。将其For
属性设置为表的ID。
进入您的代码并将myDataProvider
的类型从SelectableListTableContentProvider
更改为FilterableSelectableListTableContentProvider
。您需要在变量声明中执行此操作:
SelectableListTableContentProvider myDataProvider;
在吸气剂的两个地方:
public com.webmethods.caf.faces.data.object.SelectableListTableContentProvider getMyDataProvider() {
if (myDataProvider == null) {
metadataOrganisationProvider = (com.webmethods.caf.faces.data.object.SelectableListTableContentProvider)resolveExpression("#{myDataProvider}");
}
resolveDataBinding(MYDATAPROVIDER_PROPERTY_BINDINGS, myDataProvider, "myDataProvider", false, false);
return myDataProvider;
}
和faces-config.xml
中的托管bean配置:
<managed-bean>
<managed-bean-name>myDataProvider</managed-bean-name>
<managed-bean-class>com.webmethods.caf.faces.data.object.SelectableListTableContentProvider</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<description>Specifies whether the session bean expires when the pageflow is out of scope</description>
<display-name>Expire With Page Flow</display-name>
<property-name>expireWithPageFlow</property-name>
<property-class>java.lang.Boolean</property-class>
<value>true</value>
</managed-property>
在每个示例中,我都会在之前显示之前的内容。只需在Filter
之前添加SelectableListTableContentProvider
一词。
现在您有一个可过滤的内容提供商。
如果您尝试运行该屏幕,此时屏幕将会出错。为什么?好问题。为什么,Software AG?为什么不提供合理的默认值?为什么我们必须选择要过滤哪个字段,这与客户端Filter Input控件的开箱即用行为不同,后者只是默认过滤所有内容?
反正。在“绑定”窗格中打开可过滤的提供程序。这看起来有点奇怪,因为我不认为他们已经尽可能地配置了这个。选择Row Filter Value Binding
属性(其图标在框中为*;不知道为什么它不是字符串)并将其数据绑定属性设置为控制范围变量< / em>提供者中的正确字段。
那没有意义吗?好的,我打破了它:
Row Filter Value Binding
。#{...}
按钮以浏览所需的值。Controls Scoped Variables
部分。如果这不存在,请返回a)并正确执行:)点击好吧。该字段将绑定到如下所示的内容:
#{result.nameOfFieldToFilterOn}
部署并享受:)