我有一个使用 SelectableListTableContentProvider 填充表格的 Web 服务,效果很好。
但是,如果我向表中添加过滤器输入控件,它所做的只是过滤客户端上的当前表内容,即如果我在表的第 10 页上,它不会检查所有值,只是第 1 页上的那些。
如何对 Web 服务可以返回的所有值进行过滤器输入控件过滤器?
我有一个使用 SelectableListTableContentProvider 填充表格的 Web 服务,效果很好。
但是,如果我向表中添加过滤器输入控件,它所做的只是过滤客户端上的当前表内容,即如果我在表的第 10 页上,它不会检查所有值,只是第 1 页上的那些。
如何对 Web 服务可以返回的所有值进行过滤器输入控件过滤器?
这是你如何做到的:
按照您的说法创建一个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;
}
AND 在托管 bean 配置中faces-config.xml
:
<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
。
现在你有了一个可过滤的内容提供者。
如果您尝试运行它,此时屏幕将出错。为什么?好问题。为什么,软件公司?为什么不提供一个合理的默认值?为什么我们必须选择要过滤的字段,这与客户端过滤器输入控件的开箱即用行为不同,它默认过滤所有内容?
反正。在 Bindings 窗格中打开可过滤的提供程序。它看起来有点奇怪,因为我认为他们没有尽可能好地配置它。选择Row Filter Value Binding
属性(它的图标是方框中的 *;不知道为什么它不是字符串)并将其 Data Binding 属性设置为提供程序中正确字段的Controls Scoped Variable。
这没有意义吗?好吧,我来分解一下:
Row Filter Value Binding
在 Bindings 窗格中单击您的提供程序下的 。#{...}
按钮以浏览所需的值。Controls Scoped Variables
部分。如果这不存在,请返回 a) 并正确执行:)打好了。该字段将绑定到如下所示的内容:
#{result.nameOfFieldToFilterOn}
部署并享受:)