Adf table filter

adf filterable table
filter works only on numeric columns ,on text columns "No data...."

I created a simple test application in JDev/ADF 11.1.1.6 and I can confirm the problem you encountered. My test application is very simple. It consists of a single ADF Faces page containing a read-only <af:table> with a filter. The <af:table> is based on an ADF ViewObject on a MySQL 5.5 DB table containing two varchar columns.
The problem happens when a MySQL DB is used and it is related to the MySQL's SQL syntax. The problem is caused by a wrong WHERE-clause criterion generated by ADF when the user enters some condition in a filter field backed by a DB column of character datatype. ADF generates a WHERE-clause similar to this one:
WHERE MyTable.col1 LIKE ( ? || '%' )This would be a correct WHERE-clause for many SQL-databases, but it is not correct for MySQL, because in MySQL the operator || does not perform a string concatenation but it acts as a logical OR. In this way the expression <tt>( ? || '%' )</tt> is not evaluated to a string but to a boolean value (e.g. 0 or 1), so the operator LIKE fails to filter the rows correctly.
You can inspect the generated SQL-query and the values of the bind variables yourself by switching ADF diagnostics on (e.g. set -Djbo.debugoutput=console to the runtime configuration of your ViewController project).
JDeveloper/ADF 11.1.1.6 certification matrix says that MySQL 5.5 is certified for both JDeveloper IDE and ADF, so in my opinion you can submit an official SR if you have a valid support contract which covers Oracle ADF.
A good workaround would be to implement a custom SQLBuilder or a custom ViewCriteria adapter that patches the problem, but it would require a lot of efforts. Alternatively, you can try to implement a tricky workaround by subclassing the ViewObjectImpl class and overriding some of its query-related methods in order to replace the substring <tt>LIKE ( ? || '%')</tt> with <tt>LIKE CONCAT( ?, '%' )</tt> in the generated SQL query. This is tricky, so I do not recommend you this way either.
However, if you decide to follow the later alternative, you can override both methods <tt>ViewObjectImpl.buildQuery(...)</tt> in a custom base ViewObjectImpl class (or in a custom ViewObjectImpl class of particular VOs only) as follows:
  @Override
  protected String buildQuery(int noUserParams, boolean forRowCount)
    String query = super.buildQuery(noUserParams, forRowCount);
    if (query!=null) {
      query = query.replace( "LIKE ( ? || '%')", "LIKE CONCAT( ?, '%' )");
    return query;
  @Override
  protected String buildQuery(int noUserParams, boolean forRowCount, String selClause, String fromClause, String whereClause, int subQueryLevel)
    String query = super.buildQuery(noUserParams, forRowCount, selClause, fromClause, whereClause, subQueryLevel);
    if (query!=null) {
      query = query.replace( "LIKE ( ? || '%')", "LIKE CONCAT( ?, '%' )");
    return query;
  }Dimitar
Edited by: Dimitar Dimitrov on Feb 2, 2013 12:07 PM

Similar Messages

  • ADF Table filter issue with OR or AND input value

    Hi all,
    adf:table filterable fields for OR or AND input value not works. Actually One of column is for State and it has "OR" value for -> OREGON State.
    and I tried using filterModel and queryListener for table attribute. But I am not getting exact clue where I need to fix for this issue. Any suggestion and help is appreciated greatly.
    jdev version 11.1.1.3
    Thank you.
    - Robin

    Something like this might work for the one case:
    public void handleQuery(QueryEvent queryEvent){
        // Replace the OR with an equivalent condition
        Map m =
          ((FilterableQueryDescriptor) (queryEvent.getDescriptor())).getFilterCriteria();
        for (Map.Entry entry: (Collection<Map.Entry>) m.entrySet())
          if (entry.getValue() != null &&
              StringUtils.equalsIgnoreCase(entry.getValue().toString(), "OR"))
            entry.setValue("O AND _R");
        // Process The Query
        ELUtils.invokeMethod("#{bindings.VOQuery.processQuery}",
                             QueryEvent.class, queryEvent);
        // Put the OR back
        for (Map.Entry entry: (Collection<Map.Entry>) m.entrySet())
          if (entry.getValue() != null &&
              StringUtils.equalsIgnoreCase(entry.getValue().toString(),
                                           "O AND _R"))
            entry.setValue("OR");
    }

  • ADF Table Filter Internet Explorer 7 and Internet Explorer 8

    Good afternoon,
    Currently I am creating a table that has filters.
    So I configured the component column: Filterable = true
    It works perfectly in Chrome and Internet Explorer 9.
    It does not work in IE7 and IE8. It allows you to enter the filter parameters, however nothing happens.
    Anyone know how to solve?
    I am using:
    JDeveloper: 11.1.2.1.0
    Integrated Weblogic: 10.3
    Chrome: v16.0.912.77 m
    IE 9: 9.0
    IE 8: 0.4 IETester
    IE 7: IETester 0.4 and IE7

    Good morning, thanks for reply
    Shay, the project that this problem is stopped for the next two weeks, so return, I will test and report
    if it worked or not.
    fetishcode, his suspicion was correct, IETester does not work perfectly in this case
    Thank you all staff and developers Oracle ADF

  • ADF table sorting

    Hi all!
    How can I sort ADF table by column using select one choise LOV (i.e sort by Name insetad of ID)?

    Hi user,
    check this out.
    Java ADF Webcenter UCM SOA Weblogic: Custom ADF Table Filter with Drop Down , Validation and case insensitive

  • Search for any text in column filter on adf table

    Hi,
    I have column filter on adf table where I can search for any text starting with by default.
    For e.g. you have data my name is sam you can search on table column filter by my and you get the results my name is sam
    but I want to search by any word let's say sam and I want to display same result.
    Thank you,
    Savan Shah.

    You probably can use wildcards (% and _ )
    for example %my%
    Dario

  • Adf table with detail stamp , not able to close the detail stamp

    Hi
    i'm using 11g adf jdeveloper.
    I'm using adf table to display records of XXXVO.In table i have used detail stamp, in which i have drag XXXVO read-only form and used a ADD button which call a pop-up with createInsert of the XXXVO form with submit button.In pop i have used a drop downlist of other YYYVO. I have used another button Edit which call the same pop-up, using show pop-up.
    Issue is when i run the application i can open the detail stamp and close but i couldn't get the selected record on the table in edit mode pop up. if i give partial trigger in pop-up of table id . den i'm getting the selected record in edit pop up. but detail stamp is not working .
    Here is the code .......
    <?xml version='1.0' encoding='UTF-8'?>
    <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:af="http://xmlns.oracle.com/adf/faces/rich">
    <jsp:directive.page contentType="text/html;charset=UTF-8"/>
    <f:view>
    <af:document id="d1">
    <af:messages id="m1"/>
    <af:form id="f1">
    <af:pageTemplate viewId="/XBBaseTemplate.jspx"
    value="#{bindings.pageTemplateBinding}" id="pt1">
    <f:facet name="body">
    <af:panelBox text="AMC Charges" id="pb1">
    <f:facet name="toolbar"/>
    <af:panelGroupLayout layout="scroll" id="pgl1">
    <af:panelCollection id="pc1"
    inlineStyle="width:1105px; height:336px;">
    <f:facet name="menus">
    <af:menu text="Export Excel" id="m2">
    <af:commandMenuItem text="Excel" id="cmi1">
    <af:exportCollectionActionListener exportedId="resId1"
    type="excelHTML"/>
    </af:commandMenuItem>
    </af:menu>
    </f:facet>
    <f:facet name="toolbar">
    <af:toolbar id="t1">
    <af:commandToolbarButton id="ctb1"
    icon="/Images/browse.gif"
    shortDesc="Search"
    partialTriggers="resId1"
    disabled="#{UsapProgramPrivilege.query}">
    <af:showPopupBehavior popupId=":::p2"/>
    </af:commandToolbarButton>
    <af:commandToolbarButton id="ctb_add"
    icon="/Images/addsymbol.png"
    shortDesc="Add"
    action="#{MasterManagedBean.createRecord}"
    useWindow="true"
    windowModalityType="applicationModal"
    windowHeight="300"
    windowWidth="300"
    disabled="#{UsapProgramPrivilege.insert}"/>
    <af:commandToolbarButton
    id="ctb2"
    partialTriggers="resId1"
    icon="/Images/update_ena.png">
    <af:showPopupBehavior popupId=":::p_edit"/>
    </af:commandToolbarButton>
    <af:commandToolbarButton id="ctb_delete"
    icon="/Images/delete_ena.png"
    shortDesc="Delete"
    partialTriggers="resId1"
    actionListener="#{bindings.Delete.execute}"
    disabled="#{UsapProgramPrivilege.delete}"/>
    <af:commandToolbarButton id="ctb3"
    icon="/Images/filesave.png"
    shortDesc="Save"
    partialTriggers="resId1 ctb_add ctb_delete :::cb1"
    actionListener="#{bindings.Commit.execute}"
    disabled="#{!bindings.Commit.enabled}"/>
    <af:commandToolbarButton id="ctb5" icon="/Images/undo.png"
    actionListener="#{bindings.Rollback.execute}"
    disabled="#{!bindings.Rollback.enabled}"
    immediate="true">
    <af:resetActionListener/>
    </af:commandToolbarButton>
    <af:commandToolbarButton id="ctb4"
    icon="/Images/eraser-4.gif"
    shortDesc="Clear"
    action="#{MasterManagedBean.onClearTableSearchFields}"/>
    <af:outputText value="CmmAmcRatesVO1Iterator"
    id="ot_amciterator"
    binding="#{MasterManagedBean.iteratorName}"
    visible="false"/>
    </af:toolbar>
    </f:facet>
    <f:facet name="statusbar"/>
    <af:table value="#{bindings.CmmAmcRatesVO1.collectionModel}"
    var="row"
    rows="#{bindings.CmmAmcRatesVO1.rangeSize}"
    emptyText="#{bindings.CmmAmcRatesVO1.viewable ? 'No data to display.' : 'Access Denied.'}"
    fetchSize="#{bindings.CmmAmcRatesVO1.rangeSize}"
    rowBandingInterval="0"
    filterModel="#{bindings.ImplicitViewCriteriaQuery.queryDescriptor}"
    queryListener="#{bindings.ImplicitViewCriteriaQuery.processQuery}"
    filterVisible="true" varStatus="vs"
    selectedRowKeys="#{bindings.CmmAmcRatesVO1.collectionModel.selectedRow}"
    selectionListener="#{bindings.CmmAmcRatesVO1.collectionModel.makeCurrent}"
    rowSelection="single" id="resId1"
    binding="#{MasterManagedBean.masterTable}"
    styleClass="hieght:100% width:100%"
    columnSelection="multiple" width="1099"
    rowDisclosureListener="#{MasterManagedBean.onRowDiscloseureEvent}"
    partialTriggers="::ctb_add ::ctb_delete ::::cb1">
    <af:column sortProperty="AmrtPrdId" filterable="true"
    sortable="true"
    headerText="#{bindings.CmmAmcRatesVO1.hints.AmrtPrdId.label}"
    id="resId1c1">
    <af:outputText value="#{row.AmrtPrdId}" id="ot8"/>
    </af:column>
    <af:column sortProperty="AmrtFeeId" filterable="true"
    sortable="true"
    headerText="#{bindings.CmmAmcRatesVO1.hints.AmrtFeeId.label}"
    id="resId1c2">
    <af:outputText value="#{row.AmrtFeeId}" id="ot7"/>
    </af:column>
    <af:column sortProperty="AmrtRateTyp" filterable="true"
    sortable="true"
    headerText="#{bindings.CmmAmcRatesVO1.hints.AmrtRateTyp.label}"
    id="resId1c3">
    <af:outputText value="#{row.AmrtRateTyp}" id="ot11"/>
    </af:column>
    <af:column sortProperty="AmrtFxdAmt" filterable="true"
    sortable="true"
    headerText="#{bindings.CmmAmcRatesVO1.hints.AmrtFxdAmt.label}"
    id="resId1c4">
    <af:outputText value="#{row.AmrtFxdAmt}" id="ot3">
    <af:convertNumber groupingUsed="false"
    pattern="#{bindings.CmmAmcRatesVO1.hints.AmrtFxdAmt.format}"/>
    </af:outputText>
    </af:column>
    <af:column sortProperty="AmrtPerc" filterable="true"
    sortable="true"
    headerText="#{bindings.CmmAmcRatesVO1.hints.AmrtPerc.label}"
    id="resId1c5">
    <af:outputText value="#{row.AmrtPerc}" id="ot4">
    <af:convertNumber groupingUsed="false"
    pattern="#{bindings.CmmAmcRatesVO1.hints.AmrtPerc.format}"/>
    </af:outputText>
    </af:column>
    <af:column sortProperty="AmrtMinAmt" filterable="true"
    sortable="true"
    headerText="#{bindings.CmmAmcRatesVO1.hints.AmrtMinAmt.label}"
    id="resId1c6">
    <af:outputText value="#{row.AmrtMinAmt}" id="ot2">
    <af:convertNumber groupingUsed="false"
    pattern="#{bindings.CmmAmcRatesVO1.hints.AmrtMinAmt.format}"/>
    </af:outputText>
    </af:column>
    <af:column sortProperty="AmrtMaxAmt" filterable="true"
    sortable="true"
    headerText="#{bindings.CmmAmcRatesVO1.hints.AmrtMaxAmt.label}"
    id="resId1c7">
    <af:outputText value="#{row.AmrtMaxAmt}" id="ot9">
    <af:convertNumber groupingUsed="false"
    pattern="#{bindings.CmmAmcRatesVO1.hints.AmrtMaxAmt.format}"/>
    </af:outputText>
    </af:column>
    <af:column sortProperty="AmrtFolioId" filterable="true"
    sortable="true"
    headerText="#{bindings.CmmAmcRatesVO1.hints.AmrtFolioId.label}"
    id="resId1c8">
    <af:outputText value="#{row.AmrtFolioId}" id="ot1"/>
    </af:column>
    <af:column sortProperty="AmrtCurrId" filterable="true"
    sortable="true"
    headerText="#{bindings.CmmAmcRatesVO1.hints.AmrtCurrId.label}"
    id="resId1c9">
    <af:outputText value="#{row.AmrtCurrId}" id="ot10"/>
    </af:column>
    <af:column sortProperty="AmrtRndMthd" filterable="true"
    sortable="true"
    headerText="#{bindings.CmmAmcRatesVO1.hints.AmrtRndMthd.label}"
    id="resId1c10">
    <af:outputText value="#{row.AmrtRndMthd}" id="ot14"/>
    </af:column>
    <af:column sortProperty="AmrtDecPlc" filterable="true"
    sortable="true"
    headerText="#{bindings.CmmAmcRatesVO1.hints.AmrtDecPlc.label}"
    id="resId1c11">
    <af:outputText value="#{row.AmrtDecPlc}" id="ot5">
    <af:convertNumber groupingUsed="false"
    pattern="#{bindings.CmmAmcRatesVO1.hints.AmrtDecPlc.format}"/>
    </af:outputText>
    </af:column>
    <af:column sortProperty="AmrtActiveYn" filterable="true"
    sortable="true"
    headerText="#{bindings.CmmAmcRatesVO1.hints.AmrtActiveYn.label}"
    id="resId1c12">
    <af:outputText value="#{row.AmrtActiveYn}" id="ot13"/>
    </af:column>
    <af:column sortProperty="AmrtHoldYn" filterable="true"
    sortable="true"
    headerText="#{bindings.CmmAmcRatesVO1.hints.AmrtHoldYn.label}"
    id="resId1c13">
    <af:outputText value="#{row.AmrtHoldYn}" id="ot12"/>
    </af:column>
    <af:column sortProperty="AmrtEffFdate" filterable="true"
    sortable="true"
    headerText="#{bindings.CmmAmcRatesVO1.hints.AmrtEffFdate.label}"
    id="resId1c14">
    <f:facet name="filter">
    <af:inputDate value="#{vs.filterCriteria.AmrtEffFdate}"
    id="id1"/>
    </f:facet>
    <af:outputText value="#{row.AmrtEffFdate}" id="ot6">
    <af:convertDateTime pattern="#{bindings.CmmAmcRatesVO1.hints.AmrtEffFdate.format}"/>
    </af:outputText>
    </af:column>
    <f:facet name="detailStamp">
    <af:panelFormLayout id="pfl2" rows="9">
    <af:panelLabelAndMessage label="#{bindings.CmmAmcRatesVO1.hints.AmrtPrdId.label}"
    id="plam10">
    <af:outputText value="#{row.AmrtPrdId}" id="ot31"/>
    </af:panelLabelAndMessage>
    <af:panelLabelAndMessage label="#{bindings.CmmAmcRatesVO1.hints.AmrtFeeId.label}"
    id="plam17">
    <af:outputText value="#{row.AmrtFeeId}" id="ot20"/>
    </af:panelLabelAndMessage>
    <af:panelLabelAndMessage label="#{bindings.CmmAmcRatesVO1.hints.AmrtRateTyp.label}"
    id="plam11">
    <af:outputText value="#{row.AmrtRateTyp}" id="ot28"/>
    </af:panelLabelAndMessage>
    <af:panelLabelAndMessage label="#{bindings.CmmAmcRatesVO1.hints.AmrtFxdAmt.label}"
    id="plam18">
    <af:outputText value="#{row.AmrtFxdAmt}" id="ot16">
    <af:convertNumber groupingUsed="false"
    pattern="#{bindings.CmmAmcRatesVO1.hints.AmrtFxdAmt.format}"/>
    </af:outputText>
    </af:panelLabelAndMessage>
    <af:panelLabelAndMessage label="#{bindings.CmmAmcRatesVO1.hints.AmrtPerc.label}"
    id="plam14">
    <af:outputText value="#{row.AmrtPerc}" id="ot30">
    <af:convertNumber groupingUsed="false"
    pattern="#{bindings.CmmAmcRatesVO1.hints.AmrtPerc.format}"/>
    </af:outputText>
    </af:panelLabelAndMessage>
    <af:panelLabelAndMessage label="#{bindings.CmmAmcRatesVO1.hints.AmrtMinAmt.label}"
    id="plam1">
    <af:outputText value="#{row.AmrtMinAmt}" id="ot22">
    <af:convertNumber groupingUsed="false"
    pattern="#{bindings.CmmAmcRatesVO1.hints.AmrtMinAmt.format}"/>
    </af:outputText>
    </af:panelLabelAndMessage>
    <af:panelLabelAndMessage label="#{bindings.CmmAmcRatesVO1.hints.AmrtMaxAmt.label}"
    id="plam13">
    <af:outputText value="#{row.AmrtMaxAmt}" id="ot18">
    <af:convertNumber groupingUsed="false"
    pattern="#{bindings.CmmAmcRatesVO1.hints.AmrtMaxAmt.format}"/>
    </af:outputText>
    </af:panelLabelAndMessage>
    <af:panelLabelAndMessage label="#{bindings.CmmAmcRatesVO1.hints.AmrtFolioId.label}"
    id="plam7">
    <af:outputText value="#{row.AmrtFolioId}" id="ot27"/>
    </af:panelLabelAndMessage>
    <af:panelLabelAndMessage label="#{bindings.CmmAmcRatesVO1.hints.AmrtCurrId.label}"
    id="plam4">
    <af:outputText value="#{row.AmrtCurrId}" id="ot26"/>
    </af:panelLabelAndMessage>
    <af:panelLabelAndMessage label="#{bindings.CmmAmcRatesVO1.hints.AmrtRndMthd.label}"
    id="plam6">
    <af:outputText value="#{row.AmrtRndMthd}" id="ot25"/>
    </af:panelLabelAndMessage>
    <af:panelLabelAndMessage label="#{bindings.CmmAmcRatesVO1.hints.AmrtDecPlc.label}"
    id="plam12">
    <af:outputText value="#{row.AmrtDecPlc}" id="ot21">
    <af:convertNumber groupingUsed="false"
    pattern="#{bindings.CmmAmcRatesVO1.hints.AmrtDecPlc.format}"/>
    </af:outputText>
    </af:panelLabelAndMessage>
    <af:panelLabelAndMessage label="#{bindings.CmmAmcRatesVO1.hints.AmrtActiveYn.label}"
    id="plam2">
    <af:outputText value="#{row.AmrtActiveYn}" id="ot32">
    <f:converter converterId="CharYNAsString"/>
    </af:outputText>
    </af:panelLabelAndMessage>
    <af:panelLabelAndMessage label="#{bindings.CmmAmcRatesVO1.hints.AmrtHoldYn.label}"
    id="plam8">
    <af:outputText value="#{row.AmrtHoldYn}" id="ot24">
    <f:converter converterId="CharYNAsString"/>
    </af:outputText>
    </af:panelLabelAndMessage>
    <af:panelLabelAndMessage label="#{bindings.CmmAmcRatesVO1.hints.AmrtEffFdate.label}"
    id="plam15">
    <af:outputText value="#{row.AmrtEffFdate}" id="ot23">
    <af:convertDateTime pattern="#{bindings.CmmAmcRatesVO1.hints.AmrtEffFdate.format}"/>
    </af:outputText>
    </af:panelLabelAndMessage>
    <af:panelLabelAndMessage label="#{bindings.CmmAmcRatesVO1.hints.FeeDescription.label}"
    id="plam16">
    <af:outputText value="#{row.FeeDescription}"
    id="ot29"/>
    </af:panelLabelAndMessage>
    <af:panelLabelAndMessage label="#{bindings.CmmAmcRatesVO1.hints.FolioDescription.label}"
    id="plam9">
    <af:outputText value="#{row.FolioDescription}"
    id="ot17"/>
    </af:panelLabelAndMessage>
    <af:panelLabelAndMessage label="#{bindings.CmmAmcRatesVO1.hints.ProductDescription.label}"
    id="plam3">
    <af:outputText value="#{row.ProductDescription}"
    id="ot19"/>
    </af:panelLabelAndMessage>
    <af:panelLabelAndMessage label="#{bindings.CmmAmcRatesVO1.hints.CurrencyDescription.label}"
    id="plam5">
    <af:outputText value="#{row.CurrencyDescription}"
    id="ot15"/>
    </af:panelLabelAndMessage>
    </af:panelFormLayout>
    </f:facet>
    </af:table>
    </af:panelCollection>
    </af:panelGroupLayout>
    </af:panelBox>
    </f:facet>
    <f:facet name="first">
    <af:panelStretchLayout id="psl3" startWidth="39px">
    <f:facet name="bottom"/>
    <f:facet name="center"/>
    <f:facet name="start"/>
    <f:facet name="end"/>
    <f:facet name="top"/>
    </af:panelStretchLayout>
    </f:facet>
    <f:facet name="top"/>
    <f:facet name="Bticker"/>
    </af:pageTemplate>
    <af:popup id="p2">
    <af:panelWindow id="pw1">
    <af:panelGroupLayout id="pgl2">
    <af:panelHeader text="AMC Rates" id="ph1">
    <af:query id="qryId1" headerText="Search" disclosed="true"
    value="#{bindings.ImplicitViewCriteriaQuery.queryDescriptor}"
    model="#{bindings.ImplicitViewCriteriaQuery.queryModel}"
    queryListener="#{bindings.ImplicitViewCriteriaQuery.processQuery}"
    queryOperationListener="#{bindings.ImplicitViewCriteriaQuery.processQueryOperation}"
    resultComponentId="::pt1:pc1:resId1"
    displayMode="compact"
    />
    </af:panelHeader>
    </af:panelGroupLayout>
    </af:panelWindow>
    </af:popup>
    <af:popup id="p_edit" popupCanceledListener="#{MasterManagedBean.resetPopTitle}"
    partialTriggers="pt1:pc1:resId1">
    <af:panelWindow id="pw2" inlineStyle="width:600px; height:600.0px;"
    title="Edit"
    binding="#{MasterManagedBean.masterPenalWindow}">
    <af:panelGroupLayout id="pgl3">
    <af:panelFormLayout id="pfl4" rows="2" maxColumns="2">
    <af:inputListOfValues id="amrtFeeIdId"
    popupTitle="Search and Select: #{bindings.AmrtFeeId.hints.label}"
    value="#{bindings.AmrtFeeId.inputValue}"
    label="#{bindings.AmrtFeeId.hints.label}"
    model="#{bindings.AmrtFeeId.listOfValuesModel}"
    required="#{bindings.AmrtFeeId.hints.mandatory}"
    columns="#{bindings.AmrtFeeId.hints.displayWidth}"
    shortDesc="#{bindings.AmrtFeeId.hints.tooltip}">
    <f:validator binding="#{bindings.AmrtFeeId.validator}"/>
    </af:inputListOfValues>
    <af:inputListOfValues id="amrtPrdIdId"
    popupTitle="Search and Select: #{bindings.AmrtPrdId.hints.label}"
    value="#{bindings.AmrtPrdId.inputValue}"
    label="#{bindings.AmrtPrdId.hints.label}"
    model="#{bindings.AmrtPrdId.listOfValuesModel}"
    required="#{bindings.AmrtPrdId.hints.mandatory}"
    columns="#{bindings.AmrtPrdId.hints.displayWidth}"
    shortDesc="#{bindings.AmrtPrdId.hints.tooltip}">
    <f:validator binding="#{bindings.AmrtPrdId.validator}"/>
    </af:inputListOfValues>
    <af:inputText value="#{bindings.FeeDescription.inputValue}"
    required="#{bindings.FeeDescription.hints.mandatory}"
    columns="#{bindings.FeeDescription.hints.displayWidth}"
    maximumLength="#{bindings.FeeDescription.hints.precision}"
    shortDesc="#{bindings.FeeDescription.hints.tooltip}"
    partialTriggers="amrtFeeIdId" id="it10"
    readOnly="true">
    <f:validator binding="#{bindings.FeeDescription.validator}"/>
    </af:inputText>
    <af:inputText value="#{bindings.ProductDescription.inputValue}"
    required="#{bindings.ProductDescription.hints.mandatory}"
    columns="#{bindings.ProductDescription.hints.displayWidth}"
    maximumLength="#{bindings.ProductDescription.hints.precision}"
    shortDesc="#{bindings.ProductDescription.hints.tooltip}"
    partialTriggers="amrtPrdIdId" id="it7"
    readOnly="true">
    <f:validator binding="#{bindings.ProductDescription.validator}"/>
    </af:inputText>
    </af:panelFormLayout>
    <af:panelFormLayout id="pfl6" rows="2" maxColumns="2">
    <af:inputListOfValues id="amrtFolioIdId"
    popupTitle="Search and Select: #{bindings.AmrtFolioId.hints.label}"
    value="#{bindings.AmrtFolioId.inputValue}"
    label="#{bindings.AmrtFolioId.hints.label}"
    model="#{bindings.AmrtFolioId.listOfValuesModel}"
    required="#{bindings.AmrtFolioId.hints.mandatory}"
    columns="#{bindings.AmrtFolioId.hints.displayWidth}"
    shortDesc="#{bindings.AmrtFolioId.hints.tooltip}">
    <f:validator binding="#{bindings.AmrtFolioId.validator}"/>
    </af:inputListOfValues>
    <af:inputListOfValues id="amrtCurrIdId"
    popupTitle="Search and Select: #{bindings.AmrtCurrId.hints.label}"
    value="#{bindings.AmrtCurrId.inputValue}"
    label="#{bindings.AmrtCurrId.hints.label}"
    model="#{bindings.AmrtCurrId.listOfValuesModel}"
    required="#{bindings.AmrtCurrId.hints.mandatory}"
    columns="#{bindings.AmrtCurrId.hints.displayWidth}"
    shortDesc="#{bindings.AmrtCurrId.hints.tooltip}">
    <f:validator binding="#{bindings.AmrtCurrId.validator}"/>
    </af:inputListOfValues>
    <af:inputText value="#{bindings.FolioDescription.inputValue}"
    required="#{bindings.FolioDescription.hints.mandatory}"
    columns="#{bindings.FolioDescription.hints.displayWidth}"
    maximumLength="#{bindings.FolioDescription.hints.precision}"
    shortDesc="#{bindings.FolioDescription.hints.tooltip}"
    partialTriggers="amrtFolioIdId" id="it9"
    readOnly="true">
    <f:validator binding="#{bindings.FolioDescription.validator}"/>
    </af:inputText>
    <af:inputText value="#{bindings.CurrencyDescription.inputValue}"
    required="#{bindings.CurrencyDescription.hints.mandatory}"
    columns="#{bindings.CurrencyDescription.hints.displayWidth}"
    maximumLength="#{bindings.CurrencyDescription.hints.precision}"
    shortDesc="#{bindings.CurrencyDescription.hints.tooltip}"
    partialTriggers="amrtCurrIdId" id="it3"
    readOnly="true">
    <f:validator binding="#{bindings.CurrencyDescription.validator}"/>
    </af:inputText>
    </af:panelFormLayout>
    <af:panelFormLayout id="pfl1" rows="5" fieldWidth="150">
    <af:selectOneChoice value="#{bindings.AmrtRateTyp.inputValue}"
    label="#{bindings.AmrtRateTyp.label}"
    required="#{bindings.AmrtRateTyp.hints.mandatory}"
    shortDesc="#{bindings.AmrtRateTyp.hints.tooltip}"
    id="soc1">
    <f:selectItems value="#{bindings.AmrtRateTyp.items}"
    id="si1"/>
    </af:selectOneChoice>
    <af:inputText value="#{bindings.AmrtFxdAmt.inputValue}"
    label="#{bindings.AmrtFxdAmt.hints.label}"
    required="#{bindings.AmrtFxdAmt.hints.mandatory}"
    columns="#{bindings.AmrtFxdAmt.hints.displayWidth}"

    See if this helps:
    http://blogs.oracle.com/shay/2010/03/popup_details_for_a_table_reco.html

  • ADF 11g How to create the custom FilterableQueryDescriptor for adf table

    Can you please let me know on the following.
    1. I am dispalying the adf table using a List from the managed bean
    2. I wanted to filter the table using the filter model.
    3. i wanted to create the sub class of FilterableQueryDescriptor which i can specify. Not finding enough information on how to create and add the information in the setFilterCriteria
    Can you please provide some insight into this topci

    Hello there
    I have the same issue: chaging the background color of some column headers.
    My application is using a custom skinning and when i had headerClass property with a custom class defined in a separate css file, the page generated specified first the class from the skinning and then my new class definition. But my skinning is specifying a background color so the color is not overriden. Any idea?
    ADF code:
    <link type="text/css" rel="stylesheet" href="../../css/pivot.css" id="myStyles"/>
    <af:column headerText="#{level1.userObject.name}"
    headerClass="inputHeader"
    sortable="false" align="center" width="100"
    id="col_level1" >
    Generate HTML code:
    <th align="center" class="xuh inputHeader" afrroot="true" rowspan="2" afrleaf="true" dindex="6" id="pt1:tableId:col_level1" style="">
    <div class="x13t">AEKLF</div>
    </th>
    My CSS file:
    .inputHeader{
    background-color: Red;
    background-image: none;
    color: Black;
    font-weight: bold;
    Thanks for your help !

  • ADF table with select onechoice

    Hi,my scenario is:
    I have adf form and adf table on jspx page by vo(A).In table here there is need for select one choice populated from another vo(B).
    To acheive this i have created a transien attribue in vo(A) and bind to vo(B ) as select one choice.
    Now on value selected in selected one choice of adf table i want to filter value in another select one choice which is part of adf form on page.
    Please help me out.
    Thanks

    Hi,
    As I understand your requirement is how to build dependent LOV/selectOneChoice in ADF.
    Check this http://www.google.co.in/search?q=dependent+selectOneChoice+%2B+adf&btnG=Search&hl=en&source=hp&gbv=2&gs_sm=e&gs_upl=5656l8531l0l8687l10l9l0l2l0l0l360l1549l2-1.4l5l0&safe=active&oq=dependent+selectOneChoice+%2B+adf&aq=f&aqi=&aql=
    ~Abhijit

  • Issues with table filter during navigation between task-flows

    Hello everyone,
    I'm looking for a workaround to resolve two issues about the table filter. They are:
    1) If I type something in a filter and I change tha page (in a different task flow) when I return on the first page there is the previous search plus the string "%*". Here the video example: http://screencast.com/t/FbVenZGm
    2) In the same scenario, if I click enter on this filter the system returns this message error: "Attempt to set a parameter name that does not occur in the SQL: vc_temp_1 ". Here the video example: http://screencast.com/t/yMs6rNDF
    I have found something interesting in this thread: task-flow table filtering behaviour related to bug 8602867
    Anyway, I have implemented the solution reported in this document: http://www.oracle.com/technetwork/developer-tools/adf/learnmore/april2012-otn-harvest-1609383.pdf (pp. 8-11). This solution works fine with my master table, but it doesn't with the detail table.
    Have you any idea for this kind of behavior?
    Thanks in advance,
    Baduel

    Sudipto,
    each table has a binding on a page fragment in this way:
    <af:table [...] binding="#{backingBeanScope.MyBackingBean.masterTable}">
    <af:table [...] binding="#{backingBeanScope.MyBackingBean.detailTable}">
    In the pageDef I have two methods, each one of the VOImpl class related to the table:
    <methodAction IterBinding="MasterTableVO1Iterator"
    id="clearOutstandingImplicitViewCriteriaMaster"
    RequiresUpdateModel="true" Action="invokeMethod"
    MethodName="clearOutstandingImplicitViewCriteria"
    IsViewObjectMethod="true" DataControl="MyDataControl"
    InstanceName="MyDataControl.MasterTableVO1"/>
    <methodAction IterBinding="DetailTableVO2Iterator"
    id="clearOutstandingImplicitViewCriteriaDetail"
    RequiresUpdateModel="true" Action="invokeMethod"
    MethodName="clearOutstandingImplicitViewCriteria"
    IsViewObjectMethod="true" DataControl="MyDataControl"
    InstanceName="MyDataControl.DetailTableVO1"/>
    MyBackingBean class:
    public class MyBackingBean {
    private RichTable masterTable;
    private RichTable detailTable;
    /*getter methods here*/
    public void setMasterTable(RichTable masterTable) {
    this.masterTable = masterTable;
    resetTableFilter(1);
    public void setDetailTable(RichTable detailTable) {
    this.detailTable = detailTable;
    resetTableFilter(2);
    /*This method returns the phase id */
    private String printCurrenPhaseID() { 
    FacesContext fctx = FacesContext.getCurrentInstance();
    Map requestMap = fctx.getExternalContext().getRequestMap();
    PhaseId currentPhase=(PhaseId)requestMap.get("oracle.adfinternal.view.faces.lifecycle.CURRENT_PHASE_ID");
    // System.out.println("currentPhase = "+currentPhase);
    return currentPhase.toString();
    public void resetTableFilter(int tab) {
    String phase = printCurrenPhaseID();
    FilterableQueryDescriptor queryDescriptor;
    if(phase.startsWith("RENDER_RESPONSE")) { // Only in this phase the binding is ready
    switch(tab) {
    case 1:
    queryDescriptor = (FilterableQueryDescriptor) getMasterTable().getFilterModel();
    if (queryDescriptor != null && queryDescriptor.getFilterCriteria() != null) {
    queryDescriptor.getFilterCriteria().clear();
    // PPR refresh a jsf component
    AdfFacesContext.getCurrentInstance().addPartialTarget(getMasterTable());
    break;
    case 2:
    queryDescriptor = (FilterableQueryDescriptor) getDetailTable().getFilterModel();
    if (queryDescriptor != null && queryDescriptor.getFilterCriteria() != null) {
    queryDescriptor.getFilterCriteria().clear();
    // PPR refresh a jsf component
    AdfFacesContext.getCurrentInstance().addPartialTarget(getDetailTable());
    break;
    default: return;
    invokeClearViewCriteria(tab);
    public BindingContainer getBindings() {
    return BindingContext.getCurrent().getCurrentBindingsEntry();
    /* This method invokes the exposed method in my fragment */
    public void invokeClearViewCriteria(int tab) {
    BindingContainer bindings = getBindings();
    OperationBinding operationBinding;
    if(tab == 1)
    operationBinding = bindings.getOperationBinding("clearOutstandingImplicitViewCriteriaMaster");
    else if(tab == 2)
    operationBinding = bindings.getOperationBinding("clearOutstandingImplicitViewCriteriaDetail");
    else
    return;
    if(operationBinding != null) {
    operationBinding.execute();
    Finally I have two identical exposed methods in the VOImpl classes of the tables:
    public void clearOutstandingImplicitViewCriteria() {
    // we only want to remove the stuff that was added though the table
    //filter (or a default search form)
    // "__ImplicitViewCriteria__" is the magic name for this VC
    ViewCriteria vcDefault = this.getViewCriteria(ViewCriteriaManager.IMPLICIT_VIEW_CRITERIA_NAME);
    if (vcDefault != null) {
    //Clear the stored values
    vcDefault.clear();
    //And refresh the collection
    this.executeQuery();
    Please note that this workaround works fine with my master table, but i does not with the detail table.
    Thanks again.
    Baduel

  • Doubt on Table Filter

    Hi,
    I am using JDeveloper 11.1.1.4 and ADF-BC in my project.
    In one of my pages,I display a table with 3 columns with one of the columns displaying a dropdown[selectOneChoice] and other 2 columns with input texts[Ex:EmpName,Salary,Sex[Male/Female] ].
    I have filter enabled in my table. For the dropdowns I display Male/Female in U.I and store M/F in DB.
    But the problem is for the filter, it works only if I give M/F..but it should work for Male/Female as this is data user sees.
    Please advice on how to achieve this.
    Regards,
    Praveen

    its better if you do it programatically like
    http://fusionstack.blogspot.com/2009/08/adf-table-and-qbe.html

  • Af:table filter date format : task-flow navigation issue

    hi
    When trying to use the date format configured on the Entity Object, with Format Type as Simple Date and Format as "dd-MM-yyyy", there seems to be a problem when using task-flows.
    The approach involves an explicitly configured attributeValues binding to use in f:validator and af:convertDateTime components in the af:inputDate in the filter facet, as discussed in the forum thread "af:table filter date format"
    at af:table filter date format
    I used JDeveloper 11.1.1.3.0 to create the example application
    in http://www.consideringred.com/files/oracle/2010/TableFilterDateFormatIssueApp-v0.03.zip
    - The page filterEmp.jspx shows expected behaviour, the filter uses the configured date format and there is no problem when navigating to another page and back.
    see the screencast at http://screencast.com/t/CtQ9rsVFH3k
    - The page menuBTFPage.jspx allows for some navigation after using the filter resulting in the filter showing a date in the wrong format, using scenario (sc1)
    -- (sc1-a) : run menuBTFPage.jspx
    -- (sc1-b) : on "menu-btf : menu", click the "do go-filter-emp-btf" link
    -- (sc1-c) : on "filter-emp-btf : filterEmpFragment", filter on HireDate using "10-03-2005"
    -- (sc1-d) : click the "do goReturnSuccess" button
    -- (sc1-e) : back on "menu-btf : menu", click the "do go-filter-emp-btf" link again
    -- (sc1-f) : back on "filter-emp-btf : filterEmpFragment", see the HireDate filter value in the wrong format as "2005-03-10"
    -- (sc1-g) : click the "do goReturnSuccess" button again, which results in an error "The date is not in the correct format."
    see the screencast at http://www.screencast.com/t/ORHauBd3oQ
    questions:
    - (q1) Can the behaviour in scenario (sc1) be reproduced?
    - (q2) Why is the filter value in the wrong date format in step (sc1-f)?
    - (q3) What can be done to have the filter value consistently in the configured date format, so that errors as in step (sc1-g) can be avoided?
    many thanks
    Jan Vervecken

    hi
    First a short summary of relevant aspects of service request 3-2190488381:
    - development has reviewed bug 10193260
    - development identified some code where a pattern was not applied and started fixing the problem
    - out of the blue, development asked "Will clearing out the filter field completely when moving out of ataskflow be an acceptable behavior ?"
    - I pointed out some concerns (even in a phone call with development), but development did not see any alternative not "perceived to be very risky because of the current design", so the question whether the clearing-all-filter-fields approach would be acceptable became superfluous.
    - following this, bug 10193260 suddenly became an enhancement request (for reasons I still don't understand)
    - a workaround was suggested (for behaviour not perceived as a bug), "Clearing the search fields during taskflow exit in the backing bean (in the app)." for which I also received a modified version of my example application TableFilterDateFormatIssueApp-v0.04.zip with an implementation of the suggested workaround
    As an exercise to try an understand the suggested workaround (an because my example application seemed to have been modified using the currently yet-to-be-released JDeveloper 11.1.1.4.0) I re-implemented it in the example application
    at http://www.consideringred.com/files/oracle/2010/TableFilterDateFormatIssueApp-v0.05.zip
    It has a filter-emp-workaround-btf task-flow with a method-call activity on a managed-bean method, responsible for clearing the search fields, resulting in behaviour where the error "The date is not in the correct format." does not occur,
    as can be seen in the screencast at http://screencast.com/t/Nq7TkkRQ
      public void clearFilterFields()
        BindingContainer vBindingContainer =
          BindingContext.getCurrent().getCurrentBindingsEntry();
        DCBindingContainer vDCBindingContainer = (DCBindingContainer)vBindingContainer;
        DCDataControl vDCDataControl = vDCBindingContainer.getDataControl();
        ApplicationModule vApplicationModule = vDCDataControl.getApplicationModule();
        ViewObject vViewObject = vApplicationModule.findViewObject("EmployeesVOVI");
        ViewCriteriaManager vViewCriteriaManager = vViewObject.getViewCriteriaManager();
        vViewCriteriaManager.clearViewCriterias();
        vViewObject.clearCache();
      }Because the managed-bean method requires access to the ADF Model binding layer to get to the View Object instance used for the filtered table, the method-call activity has a page element configured in DataBindings.cpx referring to the same usageId as the page element for the page fragment showing the filtered table. So that both the method-call and view activity depend on one and the same Binding Container (e.i. PageDef file).
    The method-call activity, responsible for clearing the search fields, would need to be called before each task-flow-return activity.
    As there can be multiple view activities with multiple filtered tables in a bounded task-flow, would that result in multiple method-call activities responsible for clearing search fields (all to be called before each task-flow-return activity)?
    It looks like a more general/generic approach is desirable for the suggested workaround to be feasible.
    - (q5) Does the suggested workaround imply (as bug 10193260 is not a bug) that all bounded task-flows with filtered tables should implement it to avoid errors about formatting?
    thanks
    Jan

  • Table Filter with static LOV column

    Hi,
    I am using JDeveloper 11.1.14 and ADF-BC in my project.
    For one of the tables,I have the following scenario.
    1. I have a viewobject [Ex: EmpVo] in which one of the attributes has a static LOV[:Ex: 'Status' attribute in EmpVo has static LOV - StatusLOV with values A - Active I - Inactive].
    2. EmpVo -- > Employee table which stores A and I as status values in database
    3. Display this view object as table in jsff page.
    In the jsff page, when filter is enabled, for the status column I am able to filter only using 'A' and 'I'.
    But actually filter has to work with 'Active' and 'Inactive' as filter values.
    Please suggest the best way to implement filter in this scenario
    Thanks,
    Praveen

    Take a look at the following article:
    http://www.oracle.com/technetwork/developer-tools/adf/learnmore/16-custom-table-filter-169145.pdf
    Here, for LOV's you could have an LOV as a filter component instead of the default inputText component.
    Thanks,
    Navaneeth

  • One more Standard table filter weird work

    In the same VO described in previous thread: Standard table filter weird work
    I have another filter trouble.
    The attribute is calculated, not bound to entity.
    SQL:to_char(case when ID_BASE_TYPES_MIME is null then substr(THE_VALUE, 0, 100)
                when ID_BASE_TYPES_MIME = 7 then
           dbms_lob.substr(
              regexp_replace(LargeTextData.DATA_TEXT, '<.*?>|&.*;')
              , 100)
                else LargeBinaryData.Filename
           end) as CONTENT_PREVIEW,VO attribute:<ViewAttribute
        Name="ContentPreview"
        IsUpdateable="false"
        IsPersistent="false"
        PrecisionRule="true"
        Precision="255"
        Type="java.lang.String"
        ColumnType="VARCHAR2"
        AliasName="CONTENT_PREVIEW"
        Expression="CONTENT_PREVIEW"
        SQLType="VARCHAR">
        <Properties>
          <SchemaBasedProperties>
            <LABEL
              ResId="ru.miit.cms.model.view.ContentComplexView.ContentPreview_LABEL"/>
            <DISPLAYWIDTH
              Value="90"/>
          </SchemaBasedProperties>
        </Properties>
      </ViewAttribute>With logging turned on I apply filter like P or \P\* - anything that contains letter P. ADF table with standard filter shows me no rows.
    I take the executed SQL and parameter value from AdminServer-diagnostic-1.log. It is like:SELECT * FROM ( main query ) QRSLT  WHERE ( ( (CONTENT_PREVIEW LIKE ( :vc_temp_1 || '%') ) ) )
    [SRC_CLASS: oracle.jbo.server.OracleSQLBuilderImpl] [APP: CMS] [SRC_METHOD: bindParamValue]  [850] Binding param "vc_temp_1": %РI execute this query in PL SQL Developer and it shows me 2 records - that is correct.
    While ADF shows me no records, executing the same VO with the same parameters - that is wrong.
    From this SQL query I also created a test VO with vc_temp_1 bind variable = %Р and run it in AppModule Tester. It shows me 2 rows.
    Any ideas?
    JDev 11.1.2.2

    Hello Derio,
    Thanks for your attention. This view object is a part of a composite application with lots of business components, running ~stable on 11.1.2.2. Sherman installed, of cause.
    There are several tables with filters and all of them work fine except this attribute in this VO.
    I believe the filter would work with no problems with such attribute if I create a clean new application, but in my specific case it doesn't.
    The trouble is I don't know where to look for the error source because generated SQL and app module tester seem fine.

  • Custom Table Filter

    I am using Jdeveloper 11.1.1.6
    I have been trying to follow the following documentation: http://www.oracle.com/technetwork/developer-tools/adf/learnmore/16-custom-table-filter-169145.pdf
    The following XML was added to my page def when creating the tree iterator:
    <tree IterBinding="MyColumnLOV1Iterator" id="MyColumnLOV1">
    <nodeDefinition DefName="com.jcc.csg.model.staticview.MyColumnLOV"
    Name="MyColumnLOV10">
    <AttrNames>
    <Item Value="MyColumnCd"/>
    <Item Value="MyColumnDesc"/>
    </AttrNames>
    </nodeDefinition>
    </tree>
    Here is what my the XML for my column looks like:
    <af:column headerText="#{customstoregroupviewcontrollerBundle.DESCRIPTION_LABEL}"
    id="Description" width="300" sortable="true"
    filterable="true" sortProperty="MyColumnCd"
    align="center">
    <af:selectOneChoice value="#{row.bindings.MyColumnCd.inputValue}"
    label="#{row.bindings.MyColumnCd.label}"
    required="#{bindings.MyVO2.hints.MyColumnCd.mandatory}"
    shortDesc="#{bindings.MyVO2.hints.MyColumnCd.tooltip}"
    id="soc2" readOnly="true">
    <f:selectItems value="#{row.bindings.MyColumnCd.items}"
    id="si2"/>
    </af:selectOneChoice>
    <af:selectOneChoice id="soc1"
    value="#{vs.filterCriteria.MyColumnCd}">
    <af:forEach var="listrow"
    items="#{bindings.MyColumnLOV1.rangeSet}">
    <f:selectItem id="si1" itemValue="#{listrow.MyColumnCd}"
    itemLabel="#{listrow.DepartmentName}"/>
    </af:forEach>
    </af:selectOneChoice>
    </af:column>
    For some reason, my itemValue and itemLabel aren't working. If I go to expression builder, I have nothing underneath the "listrow" variable. Do you have some guidance as to why I can't set my itemValue and itemLabel correctly?

    So here is what I have now. I am still unable to get any of the listrow attributes. Do you have any other thoughts
    <af:column headerText="#{customstoregroupviewcontrollerBundle.DESCRIPTION_LABEL}"
    id="Description" width="300" sortable="true"
    filterable="true" sortProperty="MyColumnCd"
    align="center">
    <af:selectOneChoice value="#{row.bindings.MyColumnCd.inputValue}"
    label="#{row.bindings.MyColumnCd.label}"
    required="#{bindings.MyVO2.hints.MyColumnCd.mandatory}"
    shortDesc="#{bindings.MyVO2.hints.MyColumnCd.tooltip}"
    id="soc2" readOnly="true">
    <f:selectItems value="#{row.bindings.MyColumnCd.items}"
    id="si2"/>
    </af:selectOneChoice>
    <f:facet name="filter">
    <af:selectOneChoice id="soc1"
    value="#{vs.filterCriteria.MyColumnCd}">
    <af:forEach var="listrow"
    items="#{bindings.MyColumnLOV1.rangeSet}">
    <f:selectItem id="si1" itemValue="#{listrow.MyColumnCd}"
    itemLabel="#{listrow.DepartmentName}"/>
    </af:forEach>
    </af:selectOneChoice>
    </f:facet>
    </af:column>

  • ADF Table refresh odd behaviour: is it a bug?

    Hi,
    I am using JDev 11.1.2.3.0.
    I found a strange behaviour of ADF table, that looks like a bug.
    I am using the following scenario:
    1). I have a page with a table on it. The table displays the VO content and all it's columns are filterable.
    2). There is another more complex filter with one parameter. The filter is always applied in addition to all existing filters and is implemented in VO implementation class by overriding the  buildWhereClause() method. The parameter value is stored in the VO as a property, and the property setter is exposed via client interface.
    3). The filter parameter value is specified using Select One Choice component, the value is stored in the pageFlowScope variable (AutoSubmit=true).
    4). The filter parameter setter is binded in the PageDef file as a method action and obtains the value from the corresponding pageFlowScope variable. When user press a button, the filter should be applied. The button has PartialSubmit=true, the table has a reference to the button in the PartialTriggers.
    Here is some code:
    // MyViewObjectImpl code fragment
    private String filter;
    public String getFilter() {
      return filter;
    public void setFilter(String filter) {
      boolean valueChanged = true;
      if (this.filter != null && filter != null) {
        valueChanged = !this.filter.equals(filter);
      this.filter = filter;
      if (valueChanged) {
        clearCache();
    // Backing bean code fragment
    private RichTable table;
    public void setTable(RichTable table) {
      this.table = table;
    public RichTable getTable() {
      return table;
    public String onApplyFilter() {
      BindingContainer bc = BindingContext.getCurrent().getCurrentBindingsEntry();
      OperationBinding op = bc.getOperationBinding("setFilter");
      op.execute();
      FilterableQueryDescriptor fm = (FilterableQueryDescriptor)table.getFilterModel();
      table.queueEvent(new QueryEvent(table, fm));
      return null;
    All works fine except for one thing: the 26-th row of the table always remains from the previous filter value. More precisely, this number equals to iterator RangeSize+1.
    Is this my fault or a bug?
    Thanks.

    Sorry, I forgot about the detailed instructions.
    1). Setup database connection to match the real DB server address, username and password.
    2). Run the ViewController project.
    3). Choose character 'a' in the filter and push "Apply". This will give the countries, ending with the letter a.
    4). Change filter to 'e' and push "Apply". This should give the countries, ending with the letter e, but in fact the second row is 'Argentina' (the first row from the previous query). Pressing the button again produces correct results.
    Thanks.

Maybe you are looking for