1

我有一个使用 SelectableListTableContentProvider 填充表格的 Web 服务,效果很好。

但是,如果我向表中添加过滤器输入控件,它所做的只是过滤客户端上的当前表内容,即如果我在表的第 10 页上,它不会检查所有值,只是第 1 页上的那些。

如何对 Web 服务可以返回的所有值进行过滤器输入控件过滤器?

4

1 回答 1

3

这是你如何做到的:

  1. 按照您的说法创建一个SelectableListTableContentProvider(我们称之为myDataProvider),并确保所有这些东西在 Web 服务、提供程序和屏幕之间工作。这是以防万一这里有错误,下一位将无法正常工作。只需确保它看起来正常,正确浏览数据等。给表格一个漂亮的描述性 ID。

  2. 将过滤器输入控件添加到屏幕。将其For属性设置为表的 ID。

  3. 进入您的代码并将myDataProvider的类型从更改SelectableListTableContentProviderFilterableSelectableListTableContentProvider。您需要在变量的声明中执行此操作:

    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

    现在你有了一个可过滤的内容提供者。

  4. 如果您尝试运行它,此时屏幕将出错。为什么?好问题。为什么,软件公司?为什么不提供一个合理的默认值?为什么我们必须选择要过滤的字段,这与客户端过滤器输入控件的开箱即用行为不同,它默认过滤所有内容?

    反正。在 Bindings 窗格中打开可过滤的提供程序。它看起来有点奇怪,因为我认为他们没有尽可能好地配置它。选择Row Filter Value Binding属性(它的图标是方框中的 *;不知道为什么它不是字符串)并将其 Data Binding 属性设置为提供程序中正确字段的Controls Scoped Variable

    这没有意义吗?好吧,我来分解一下:

    1. 在 WYSIWYG 视图中单击您的表。不是表中的一行,是整个表。确保它保持选中状态,并且您不会意外取消选择它。
    2. Row Filter Value Binding在 Bindings 窗格中单击您的提供程序下的 。
    3. 在“属性”窗格中,转到“数据绑定”选项卡并单击#{...}按钮以浏览所需的值。
    4. 在打开的弹出窗口中,滚动到顶部并打开该Controls Scoped Variables部分。如果这不存在,请返回 a) 并正确执行:)
    5. 选择您要过滤的值。
    6. 打好了。该字段将绑定到如下所示的内容:

      #{result.nameOfFieldToFilterOn}
      

部署并享受:)

于 2014-10-23T08:34:33.883 回答