如何使用在webMethods CAF中的服务器上过滤的过滤器创建表?

时间:2014-10-23 08:11:05

标签: jsf webmethods webmethods-caf

我有一个使用SelectableListTableContentProvider填充表的Web服务,它可以很好地工作。

但是,如果我向表格中添加一个过滤器输入控件,它所做的只是对客户端的当前表格内容进行过滤,即如果我在表格的第1页上的第1页,那么它不会#39 ;去检查所有值,只检查第1页上的值。

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

1 个答案:

答案 0 :(得分:3)

以下是您的工作方式:

  1. 按照SelectableListTableContentProvider创建(让我们称之为myDataProvider),并确保所有这些内容在Web服务,提供商和屏幕之间起作用。这是为了防止这里出现错误,然后下一位就不会正常工作。只需确保它看起来正常,正确浏览数据等等。为表格提供一个漂亮的描述性ID。

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

  3. 进入您的代码并将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一词。

    现在您有一个可过滤的内容提供商。

  4. 如果您尝试运行该屏幕,此时屏幕将会出错。为什么?好问题。为什么,Software AG?为什么不提供合理的默认值?为什么我们必须选择要过滤哪个字段,这与客户端Filter Input控件的开箱即用行为不同,后者只是默认过滤所有内容?

    反正。在“绑定”窗格中打开可过滤的提供程序。这看起来有点奇怪,因为我不认为他们已经尽可能地配置了这个。选择Row Filter Value Binding属性(其图标在框中为*;不知道为什么它不是字符串)并将其数据绑定属性设置为控制范围变量< / em>提供者中的正确字段。

    那没有意义吗?好的,我打破了它:

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

      #{result.nameOfFieldToFilterOn}
      
  5. 部署并享受:)