ADF Faces performance

Hi All,
We need to do our project in ADF faces as UI technology. So we want to know the exact performance measures for that. There was some information that ADF faces is a bit slow as comparision to other JSF implementation like MyFaces.
So can anyone please gives some information or reference for ADF Faces performance with respect to Myfaces or any JSF implemetation ?
Thanks
Suhas

Suhas,
I am not aware of any performance measurement that compares MyFaces with ADF Faces, especially because ADf Faces is a UI component set only that by default uses the JSF RI engine while MyFaces also contains its own implementation of RI.
ADF Faces runs on top of any JSF compliant implementation and on MyFaces as well. This means that if the performance of ADF Faces with Sun RFI isn't sufficient, you just swap it.
There was some information that ADF faces is a bit slow as comparision to other JSF implementation like MyFaces
Assuming you didn't make this one up, can you point me to the source of information you quote here ?
Frank

Similar Messages

  • Forms vs UIX/ADF Faces ?

    Hi,
    We are considering to migrate Forms application into J2EE Web Apps (UIX or ADF Faces), using JHeadStart as rapid dev tool.
    Does any body know, how is the UIX/ADF Faces performance compared to Forms, provided they are deployed on same IAS and network specification and bandwidth ?
    Is it true that UIX/ADF Faces will need smaller bandwidth than Forms ?
    Or are there any other reason that will justify us to migrate Forms into J2EE Web app ?
    Thank you for your help,
    xtanto

    do not duplicate your question so much times...
    UIX versus Swing
    UIX
    many of the old authors are not frequently here in the forum. Go to the JDeveloper-Forum

  • URGENT: ADF Faces table updating issue.

    I have a project that uses JSF, ADF Faces, EJB 3.0, and the ADF binding framework.
    In this project, I have a page with a databound ADF Faces Table. The table has a number of read-only columns and two read-write columns. I also have an Edit button that allows the user to pop up a dialog box to edit the selected row of the table. When the user clicks OK in the dialog box, the data is passed back to the main page and the table is updated.
    Everything works correctly for the read-only columns. For the read-write columns, however, the table data does not get updated following an edit. This is what I have found:
    1. The table row data gets passed in to the Edit dialog correctly.
    2. The data gets passed back correctly.
    3. The model gets updated correctly (up to and including the database).
    4. Looking at the iterator in the debugger shows the correct, updated data.
    5. When the table row is getting redrawn, the getter calls for the read-write columns return the updated data.
    6. As mentioned above, the read-only columns get updated correctly.
    7. Updating the read-write columns directly from the table works correctly.
    So, the problem appears to be in the GUI layer. I suspect that, somehow, the submitted values of the read-write columns are not getting set properly, but I cannot figure out how to do this.
    Note that clicking on the Edit button results in a partial submit. In the return listener, I add a call to AdfFacesContext.getCurrentInstance().addPartialTarget(getRecipientTable()) in order to redraw the table (getRecipientTable() is the bound value of the ADF table).
    Please help! We are so close to production and we need to fix this.
    Thanks,
    Ara

    Hi,
    I don't have a testcase for this, so I just come up with ideas to try
    1. refresh the parent container of the table. It seems that the input text components are not triggered to refresh if the refresh is on the table.
    2. If using ADF, make sure the update is performed directly on theiterator (which automatically is the case if you use a ADF bound form for this)
    3. Check if executing the table iterator and then setting back the current row makes a difference
    Frank

  • ADF Faces: How do I set values for input controls in an af:table

    Use case: user enters master/detail information into an input form using an af:table for the desired number of detail rows.
    I have an ADF Faces input form with master level input controls, and an af:table (bound to a backing bean CoreTable) for the detail data set.
    The input controls are value bound to updateable view objects built from entity objects, with the appropriate view links providing master/detail iterators.
    Once the user has entered the master keys (via inputTexts, and selectOneChoices), I create a row in the detail VO, thus creating a visible blank row in the af:table.
    The user then completes the key for the detail row (in the af:table) by selecting a value in a selectOneChoice (in a af:column) with autoSubmit on and a valueChangeListener that sets the VO row attribute with the new value.
    The user then continues to enter into the remaining inputTexts and selectOneChoices in the af:columns until all values have been entered.
    I do not have autoSubmit on for any input controls in the af:columns other than the key, for performance improvement.
    The user can then use a command button (which has an action method) to create another row in the af:table.
    But, (in the action method) I need to set the values for the 1st detail VO row attributes, from the input controls, before creating another row.
    The input controls are bound to backing bean CoreInputText and CoreSelectOneChoice objects, and they have not set their values at this point, even though I have partialSubmit on for the "New Row" command button.
    I do not value bind the input controls in the af:columns to the backing bean objects, because we need to display data for all rows entered into the af:table.
    Any advice on the best way to perform this operation would be very appreciated!!!!

    Thanks for the reply Steve!!
    Yes, I followed the techniques in Screencast#7, and it works great in my edit page.
    But I am having problems with my input form.
    I actually have master/detail/detail relationship for which I am creating an input form.
    I created the input form as a copy of the edit form, and am making revisions as necessary.
    I created new view objects for the input form (from my three entity objects), which have the "Tuning" set to retrieve "No Rows (i.e. used only for inserting new rows)"
    I added an invokeAction that binds the "CreateInsert" action on the master iterator, so when the page is first displayed, the master level controls are available for data entry (as in 13.6.2 in the Developers Guide): but the first level detail controls are not rendered, and the af:table (for the second level detail) is rendered but with no rows.
    Once the user enters key values for the master (a three part key), I manually create a first level detail row by executing the "CreateInsert" action binding for the first level detail iterator.
    Continuing on, the user then enters a key value for the first level detail I manually create a second level detail row using it's "CreateInsert" action binding.
    Now the user has a form with all master and first level detail controls completed and one empty row in the af:table for it's first entry.
    The key column in the af:table has autoSubmit on, and an value change listener. That listener uses it's getNewValue() to set the key value ("locationCode" in this case) using
    setLocationCode from the ViewRowImpl. Here is that value change listener:
    public void locationChanged(ValueChangeEvent event) {
    if (null != event.getNewValue()) {
    LocObsCreateViewRowImpl locCreateRow = (LocObsCreateViewRowImpl)appMod.findViewObject("LocObsCreateView").getCurrentRow();
    if (null == locCreateRow.getLocationCode()) {
    locCreateRow.setLocationCode(event.getNewValue().toString());
    Now comes my problem: once they have entered the values in the remaining columns, they can use a command button to create another row in the 2nd detail iterator, thus creating another visible empty row in the af:table. But the values from the first row (other than the key column) are not assigned to the row in the collection and I can't figure out how to set values in the collection's row.
    I imagine I'm missing something using bindings and the Request Processing Lifecycle, and after reading this I can see how much manual work is going on.
    The users have specified the need to have all information available on one page, so I've designed it so they can insert and iterate through the first level detail collection.
    They have also asked to not use the mouse; they are looking for a "heads-down-data-entry" system.
    Again, I really appreciate any advice you could give.
    Jeffrey

  • What about security in adf faces application ?

    It seem that the documentation has a little bit changed about security for adf faces application.
    SRDemo J2EE sample application only implemented the security at the web container and may be for the session beans (don't remember) by using security-role and security-constraint in web.xml configuration file.
    It seem that the documentation recommand now to implement adf security and didn't find anymore the reference to the standard j2ee security implementation.
    We found also that the security constraints checked by the web container was sometimes ignored and the container didn't ask us to login before displaying a page.
    Is ADF security a clear Oracle recommandation for ADF Faces application ?
    What about j2ee security for this type of application (why it is not recommended to use it) ?

    Hi,
    there is no single recommedation about security because security ideally is applied on several levels to implement security in depth. Container managed security with J2EE is a good option to secure page access and - if using EJB - to propagate the user identity for method level access control.
    Using ADF Security, which is security added to the binding layer based on JAAS, a second layer of the security onion becomes available that allows you to define which user is allowed to perform which operation on an iterator or attribute binding. This goes beyond of what container managed security can do for you.
    The thrid layer is business layer security and eventually database security.
    For Oracle Open World we will have a developmengt track and one of the presentation I am giving with Ric Smith from our team is about end-to-end application security for ADF Faces, ADF, ADF BCor TopLink/EJB and the Oracle database.
    The plan is to also write this up in a paper, but this would come late because of other priorities I have on my plate. So attending OOW probably is the best option for you to get the big picture
    Frank

  • How to Redirect to another page Using JavaScript in ADF Faces?

    Hi Guys,
    I have a UI user case that has a af:menu which contains mutiple af:goMenuItem. When user click on the menu, the menu slides down and shows up the af:goMenuItem. As we know, you could define the page destinations in af:goMenuItem to go to another page when user clicked, but af:menu itself cannot be redirected to another page. Well, the user case wants the menu itself could be redirected if user click on it.
    So I am thinking using JavaScript to do this: when the af:menu gets clicked, redirect to another page. BUT, I looked over the ADF Faces Javascript API and was not able to find that piece of code to do this. Any help???
    Another work around for the user case scenario is to use HTML marks + CSS/JavaScript instead of af:menu and af:goMenuItem but this changes the scope of technology although it's not hard to do
    Any other idea to accomplish the user case other than what I could think of ?
    Thanks Guys!
    Jay

    Hi,
    1 - you can have a hidden command item to do the navigation based on a control flow case. In this case, you access the command component from JavaScript create a new ActionEvent and queue it
    2 - JavaScript can use an af:serverListener to call into a server side managed bean method to perform the navigation
    there is no JavaScript API for navigation in ADF Faces because navigation in JavaServer Faces is an event driven framework and we don't support developers fighting the framework.
    Frank

  • ADF Faces - access to content in WEB-INF directory

    Hello,
    I create simple JSF application that use ADF Faces and deploy it to Oracle iAS. But why can i also access files in WEB-INF directory? For example, the following URL - http://myserver.si/MyApp/faces/WEB-INF/web.xml - will return the content of XML file. By my knowledge of J2EE architecture, access to this directory should be forbidden.
    Should I set some parameter on javax.faces.webapp.FacesServlet servlet filter to prevent access to WEB-INF directory? Thank you for help.
    Google also found the following links:
    - http://mail-archives.apache.org/mod_mbox/myfaces-dev/200602.mbox/%[email protected]%3E
    - http://svn.apache.org/viewcvs.cgi//myfaces/core/trunk/api/src/main/java/javax/faces/webapp/FacesServlet.java/?rev=375489&view=diff&r1=375489&r2=375488&p1=/myfaces/core/trunk/api/src/main/java/javax/faces/webapp/FacesServlet.java&p2=/myfaces/core/trunk/api/src/main/java/javax/faces/webapp/FacesServlet.java
    Regards,
    Matic

    Hi,
    the reason for this is that the WEB-INF directory is protected against direct client (browser) requests. Using Faces, the JSF servlet performs this access as a server side forward request in which case there is no container-managed protection.
    If you want to avoid this then you can write a servlet filter in fron of JSF in which you check for any occurences of directories you want to prohibit access to.
    Its not a bug, its the way J2EE is designed ;-(
    Frank

  • How to minimize Client-Server Round-trip in ADF Faces application ?

    Hi All,
    We have just finished POC on our prototype of ADF Faces + ADF BC application. The POC Emphasizes on Bandwidth requirement.
    After receing the result from the communication provider, including : TCP packets send, Bytes sent from/to server and number of Client-Server Round-Trip.
    There are several part of the application that Must be tuned for the application to run on acceptable performance.
    Here is some page/ function that should be tuned :
    - First page, ADF Read Only Table with two images and some buttons, cause 5 round-trip
    - ADF Dialog Returning Value (as LOV), cause 4 Round-trips
    - On ADF Form, press Commit button, cause 3 Round-trips.
    So the question is :
    1) How to reduce round-trips on ADF Faces application ?
    2) How to minimize the bytes send from / To server on a specific user action ?
    Please give me some recommendation..
    Thank you very much,
    xtanto

    Hi Frank and Steve,
    Thank you for your reply.
    Yes Frank, what I mean by Round-Trip is the traffic between Client and the Server. And Yes, we will use VSAT where the latency is 1 - 1.5 second, so that round-trip matters significantly.
    What I will do is :
    - use minimal skin and No image at all
    - don't use Dialog for LOV because it requires AutoSubmit there.
    - Use 'Apply-Changes' button to do server-side validation before Commit.
    Then do the POC / testing again.
    Thank you,
    xtanto

  • Jdev101304 SU5 - ADF Faces - Web app deployment best practice|configuration

    Hi Everybody:
    1.- We have several web applications that provides a service/product used for public administration purposes.
    2.- the apps are using adf faces adf bc.
    2.- All of the apps are participating on javaSSO.
    3.- The web apps are deployed in ondemand servers.
    4.- We have notice, that with the increase of users on this dates, the sessions created by the middle tier in the database, are staying inactive but never destroyed or removed.
    5.- Even when we only sing into the apps using javasso an perform no transacctions (like inserting or deleting something), we query the v$sesisons in the database, and the number of inactive sessions is always increasing, until the server colapse.
    So, we want to know, if this is an issue of the configurations made on the Application Module's properties. And we want to know if there are some "best practices" that you could provide us to configure a web application and avoid this behavior.
    The only configurations that we found recomended for web apps is set the jbo.locking.mode to optimistic, but this doesn't correct the "increasing inactive sessions" problem.
    Please help us to get some documentation or another resource to correct configure our apps.
    Thnks in advance.
    Edited by: alopez on Jan 8, 2009 12:27 PM

    hi alopez
    Maybe this can help, "Understanding Application Module Pooling Concepts and Configuration Parameters"
    see http://www.oracle.com/technology/products/jdev/tips/muench/ampooling/index.html
    success
    Jan Vervecken

  • ADF Faces showDetailItem seems to "load" child elements twice on tab select

    Problem Summary:
    Child elements of showDetailItem are being loaded/executed twice. The parent of the showDetailItem is a showOneTab, and the child of showDetailItem is an af:objectImage, which calls a servlet I have written that outputs an image.
    The problem I am having is that when I click on a tab (showDetailItem) my servlet is called twice. It is as if the af:objectImage line of my JSP is executed twice.
    I have proven this with breakpoints in the servlet and printing a message to the console. The doGet() method of my servlet is called twice. Using breakpoints in the JSP I see the JSP is executed/read only once.
    Details:
    I am requesting help with this problem as I cannot solve it one my own. I have tried the following, but have had no success.
    1. Searched the web for a similar problem.
    2. Searched this forum for a similar problem.
    3. Consulted the ADF Developer Guide version 10.1.3.0
    4. Upgraded my version of JDeveloper to 10.1.3.2.0, which has ADF Faces (oracle.faces.dt) version 10.1.3.40.66.
    5. Debugging with print statements and stepping through JSP and servlet code.
    6. Created the simplest JSP possible that I could still produce the problem with.
    The Scenario:
    My goal is to use the ADF Faces showOneTab and showDetailItem tags to create two tabbed panels that will contain a blank tab (tab one) and an image (on tab 2).
    I have written a servlet, BrowserImage, which takes and ID as a parameter retrieves a BLOB from view object and then outputs a jpeg image to the browser. This is done by using the af:objectImage tag and specifying my servlet in the source parameter. The image is displayed fine, but I don't want the servlet to be called twice for performance reasons.
    Here is the simplest JSP that contains the problem.
    Note: I tried to simplify even more by calling the servlet in different ways (jsp:include etc..), but was unable to produce the problem. I think it is key that I call the servlet using an ADF Faces tag (af:objectImage).
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <%@ page contentType="text/html;charset=windows-1252"%>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
    <%@ taglib uri="http://xmlns.oracle.com/adf/faces/html" prefix="afh"%>
    <%@ taglib uri="http://xmlns.oracle.com/adf/faces" prefix="af"%>
    <%@ page import="javax.faces.context.FacesContext"%>
    <%@ page import="javax.faces.el.ValueBinding"%>
    <%@ page import="oracle.adf.model.BindingContext"%>
    <%@ page import="oracle.adf.model.binding.DCDataControl"%>
    <%@ page import="oracle.jbo.ApplicationModule"%>
        <%! FacesContext fc = FacesContext.getCurrentInstance(); %>
        <%! ValueBinding vb = fc.getApplication().createValueBinding("#{data}"); %>
        <%! BindingContext bc = (BindingContext)vb.getValue(fc); %>
        <%! DCDataControl dc = bc.findDataControl("AdSearchAppModuleDataControl"); %>
        <%! ApplicationModule am = (ApplicationModule)dc.getDataProvider();%>
        <% session.setAttribute("theAm", am); %>  
    <f:view>
      <afh:html>
        <afh:head title="showOneTest">
          <meta http-equiv="Content-Type"
                content="text/html; charset=windows-1252"/>
        </afh:head>
        <afh:body>
          <af:form>
            <af:showOneTab position="above">
              <af:showDetailItem text="showDetailItem 1">
              </af:showDetailItem>
              <af:showDetailItem text="showDetailItem 2">
                <af:objectImage source="/BrowserImage?imgId=1"/>
              </af:showDetailItem>
            </af:showOneTab>
          </af:form>
        </afh:body>
      </afh:html>
    </f:view>Note: The Java Script code included in the JSP is used to get an application module instance and pass it to my servlet in the session scope, so my servlet can access a view object, which contains the BLOB to output. I thought I should explain this as it may look confusing.
    Any help would be appreciated.
    Thanks,
    Mark

    I don't think adding a flag to my servlet will work. I left out some details in the original posting that will likely make the flag solution unusable.
    It is true that when I click on a tab that my servlet is called twice. My main goal is to ensure that the BrowserImage servlet only called when truly needed. The part I left out of the original posting is that if I click on a tab for the first time I can see my messages in the console indicating it was called twice.
    . BrowserImage severlet called (doGet)
    . BrowserImage servlet called (doGet)
    The key is if I click on the tab again I only see the message appear once.
    . BrowserImage severlet called (doGet)
    At first I thought this was the correct behavior, but I now feel this is wrong as I think the image is being cached locally on the client browser by ADF Faces, so the first call to BrowserImage is not made, but for some reason on the second "load" of the panel the BrowserImage servlet is called.
    To summarize the new details, I still think the showDetailItem is "loading" twice, but BrowserImage is only being called once, because the first loading used a locally cached image. This is my best guess, I did not prove this 100%. I did prove that the image is shown on the page before my servlet outputs it this made me start thinking about the client cache. Also I think it is an ADF Faces specific cache because if I use the "img" tag I don't think caching is used and the image is output by the call to my servlet. I don't want to use img for two reasons, 1 I would d like to use the client cache, 2 the img tag will not stay inside the showDetailItem, showDetail Item needs af: components as children it seems.
    So the reason I feel this problem can't be solved with a flag is because I think the image will be cached on the client side and if the showDetailItem is loaded twice it seems my servlet is called once, but it was not required to be called to render the image. I can't use the concept of checking for the servlet being called by the same session in very quick succession, because the real problem I am trying to solve is the servlet should not be called at all, if the client cache had been used.
    Perhaps there is a way for my servlet to determine if the client cache was used, but I have no idea how.
    I should also point out I am displaying images in a table instead of a showOneTab using the same servlet and technique and the client cache is always used correctly, the BrowserImage is only called if the image is not cached on the client. This is why I think this is a showOneTab problem.
    Sorry for leaving out these details, but I did not want to confuse the original posting with too much info. I figured if the tab was only loaded once, the cached image would be used and all would be good.
    Again if you can provide more help I really appreciate it.

  • [ADF BC | ADF Faces] Updating a table with values updated in transaction

    Summary: A table is based on a view with a bind variable. Based on some action, I update rows in the view so that they no longer satisfy the query. How do I update the table to reflect this?
    I have an ADF Faces page with a multi-select table component on it, mapped to an ADF Business Components view object. The view object has a bind variable (:Status), which is used in the query to only retrieve rows with a specific status.
    The user selects rows in the table that should have their status changed, and then hits a button to perform the action. In the backing bean for the page, the button click is processed and the selected rows are updated to a different status. At this point the transaction is not committed.
    Changing the status of these rows now means that they no longer match the where clause of the view object, yet they still appear in the table.
    My question is, how can I update the table so that rows which don't match the where clause are removed?
    This is a simplified version of the problem I am working on - this needs to work when rows that aren't in the table are being updated so that they now MATCH the where clause and rows may also be added or completely removed.

    Quite an interesting little problem....
    I have created a simple test case to illustrate your scenario - perhaps Steve M could comment...
    My scenario:
    1). create an EO based on the HR.EMPLOYEES table
    2). create an updatable VO based upon the aforementioned EO. Add "COMMISSION_PCT IS NULL" to the where clause.
    3). Add the VO to an app module as usual.
    4). Create an ADF Faces page by dropping the VO from the data control as an ADF table. Show only first name, last name, and commission pct.
    5). Add a command button to the page so I can call various code from the backing bean.
    Now, when I update the commision for the first record to ".1" and press the submit button (the one in the table actions facet), the update "takes" - I assume that it's just in the EO cache at this point. The record still shows on the screen, even though it no longer meets the where clause criteria.
    When I add some code to the command button (#5) to perform a commit - the record STILL shows on the screen after committing to the DB. I can make the record disappear by either (in the same backing-bean method that does the commit)
    a). Re-execute the iterator after the commit
    b). Call "clearVOCaches" on the application module (forces the iterator to re-execute)
    I even tried programmatically adding the where clause back in (via addWhereClause) and re-executing the iterator - no go. I suspect that the only way to do this would be to post the changes to the DB (without committing them) and then re-execute the query. This, however, would be a killer from a scalability perspective.
    John

  • ADF Faces with ADF BC

    Hi everyone,
    I'm trying to map a <af:table> to an ADF Business Component. I can retrieve the records and I can also navigate doing Next and Previous, but I cannot do a Delete of a record. Do you know if there's any kind of "work arround" to use ADF Faces with ADF BC to do a delete or update, etc.?
    Here is the code, you can notice the: <af:tableSelectOne> tag to put the radio buttons colums to select which one to delete, and you can also notice the action="#{row.markForDeletion}" for the commandbutton to perform the delete.
    Jonas Jacobi wrote in his web blog on August 16 that he was going to post some samples for this "work arround" but I think he never posted them.
    Here is the code:
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
    <%@ taglib uri="http://xmlns.oracle.com/adf/faces/EA12/html" prefix="afh"%><%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
    <%@ taglib uri="http://xmlns.oracle.com/adf/ui/jsp/adftags" prefix="adf"%>
    <adf:uimodelreference model="table_testUIModel"/>
    <%@ taglib uri="http://xmlns.oracle.com/adf/faces/EA12" prefix="af"%>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
    <%@ page contentType="text/html;charset=windows-1252"%>
    <html>
    <head>
    <H1>This is a Test</H1>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <title>my test page</title>
    <link href="css/blaf.css" rel="stylesheet" media="screen"/>
    </head>
    <body>
    <f:view>
    <afh:head title="tableSelectOne Demo"/>
    <af:panelPage>
    <af:table rows="3" var="row" value="#{bindings.CmSvcView1.rangeSet}" first="0">
    <f:facet name="selection">
    <af:tableSelectOne text="Select and ...">
    <af:commandButton text="Delete" action="#{row.markForDeletion}"/>
    </af:tableSelectOne>
    </f:facet>
    <af:column>
    <f:facet name="header">
    <af:outputText value="SvcId"/>
    </f:facet>
    <af:outputText value="#{row.SvcId}"/>
    </af:column>
    <af:column>
    <f:facet name="header">
    <af:outputText value="SvcNum"/>
    </f:facet>
    <af:outputText value="#{row.SvcNum}" styleClass="OraHeaderSubSub"/>
    </af:column>
    <af:column>
    <f:facet name="header">
    <af:outputText value="SvcName"/>
    </f:facet>
    <af:outputText value="#{row.SvcName}" styleClass="OraHeaderSubSub"/>
    </af:column>
    </af:table>
    </af:panelPage>
    </f:view>
    </body>
    </html>
    Thanks,
    Pablo (sorry for the long post)

    Thank you Gabrielle. At least now I have an excuse to tell my boss why I can't get it to work.
    Any idea when it may be available? Would it be a better idea to implement the table in plain vanilla JSF, and when ADF Faces is ready for ADF BC then do the migration?
    Are there any workarround to this problem?
    Thank you for your time,
    Pablo

  • Developing a User Interface with ADF Faces - Tutorial - Questions

    Hello everybody,
    I am a forms developer and I am totally new to ADF.
    I started from the tutorials : Developing Business Services with ADF BC and Developing a User Interface with ADF Faces...
    Everything was easy and very clear, as far as the material covered in the tutorial is concerened.
    But when I tried to modify a little bit the application, to perform a different task... disaster!!! :-)
    One of the "simple" things that I tried to do -for example- is :
    In the login.jspx, where we have created an ADF Parameter form (that accepts as a parameter the customer ID) and
    retrieves in the next page the Orders of the specific customer.... to Display a message, such as "+Customer Does Not Exist+"
    if the user types in the parameter form an not existent customer ID...
    I understand that I should use a validator.... But I cannot find the list validator (from query) in the bind variables not in the ADF Parameter Form Fields....
    Does anyone know?
    Regards,
    Maira Kotsovoulou

    Dear Grant,
    CustomerID is in the UI Project, and appears as a part of an ADF Parameter Form... and I can not find key exists in the UI Validators....
    CustomerID in the .entities is a bind variable in a query. select ... from customers where customer_id = :p_customer_id. Again KEYEXISTS validator is not available in the bind variables sections... Only in the attributes!!!
    I understand that the "normal" behavior in a query with bind variables where there is no match is to display nothing as it does!!!
    But I was just wondering, if I could even trap that before I display the empty form...? Or could I display a text in my ADF form, that says no rows... (as I can do in an ADF Table???)

  • ADF Faces refresh conditions cause NullPointerException

    We are developping an ADF faces web application. For the jspx pages we use EJB3 data controls to display data from the database and other legacy systems.
    Most values in our application are read-only and some take some time to be provided by the database. To increase performance of our web application we decided to change the refresh condition from Refresh="ifNeeded" to Refresh="renderModelIfNeeded". The parameters of the bindings should not change so this seemed to be o.k. for our needs. To avoid the call during postbacks we added RefreshCondition="${!adfFacesContext.postback}".
    <pageDefinition xmlns="http://xmlns.oracle.com/adfm/uimodel"
    version="10.1.3.41.57" id="app_pagePageDef"
    Package="web.pageDefs"
    EnableTokenValidation="false">
    <methodIterator id="findSomething"
    Binds="findSomething.result"
    DataControl="GatewayLocal" RangeSize="-1"
    BeanClass="entities.MyObject"
    RefreshCondition="${!adfFacesContext.postback}"
    Refresh="renderModelIfNeeded"/>
    Performance is now really good and all data is displayed.
    On the other hand we now experience a strange behaviour and from time to time we get the following error message:
    07/10/30 14:02:37 java.lang.NullPointerException
    07/10/30 14:02:37 at oracle.jbo.uicli.binding.JUCtrlListBinding.findListIndex(JUCtrlListBinding.java:1096)
    07/10/30 14:02:37 at oracle.jbo.uicli.binding.JUCtrlListBinding.setValueAt(JUCtrlListBinding.java:1726)
    07/10/30 14:02:37 at oracle.jbo.uicli.binding.JUCtrlListBinding.updateValuesFromRow(JUCtrlListBinding.java:1339)
    07/10/30 14:02:37 at oracle.jbo.uicli.binding.JUIteratorBinding.navigated(JUIteratorBinding.java:282)
    07/10/30 14:02:37 at oracle.jbo.common.RowSetHelper.fireNavigationEvent(RowSetHelper.java:261)
    07/10/30 14:02:37 at oracle.adf.model.generic.DCRowSetIteratorImpl.notifyNavigationEvent(DCRowSetIteratorImpl.java:1611)
    07/10/30 14:02:37 at oracle.adf.model.generic.DCGenericRowSetIteratorImpl.notifyNavigationEvent(DCGenericRowSetIteratorImpl.java:313)
    07/10/30 14:02:37 at oracle.adf.model.generic.DCRowSetIteratorImpl.syncIterator(DCRowSetIteratorImpl.java:258)
    07/10/30 14:02:37 at oracle.adf.model.generic.DCRowSetIteratorImpl.first(DCRowSetIteratorImpl.java:653)
    07/10/30 14:02:37 at oracle.adf.model.binding.DCIteratorBinding.refreshControl(DCIteratorBinding.java:649)
    07/10/30 14:02:37 at oracle.adf.model.binding.DCIteratorBinding.rangeRefreshed(DCIteratorBinding.java:735)
    07/10/30 14:02:37 at oracle.jbo.common.RowSetHelper.fireRangeRefreshed(RowSetHelper.java:172)
    07/10/30 14:02:37 at oracle.adf.model.generic.DCRowSetIteratorImpl.notifyRangeRefreshed(DCRowSetIteratorImpl.java:1570)
    07/10/30 14:02:37 at oracle.adf.model.generic.DCRowSetIteratorImpl.buildProviderIterator(DCRowSetIteratorImpl.java:465)
    07/10/30 14:02:37 at oracle.adf.model.generic.DCRowSetIteratorImpl.fetchDataSource(DCRowSetIteratorImpl.java:394)
    07/10/30 14:02:37 at oracle.adf.model.generic.DCRowSetIteratorImpl.getRowAtAbsoluteIndex(DCRowSetIteratorImpl.java:1008)
    07/10/30 14:02:37 at oracle.adf.model.generic.DCRowSetIteratorImpl.syncIterator(DCRowSetIteratorImpl.java:225)
    07/10/30 14:02:37 at oracle.adf.model.generic.DCRowSetIteratorImpl.first(DCRowSetIteratorImpl.java:653)
    07/10/30 14:02:37 at oracle.adf.model.binding.DCIteratorBinding.internalGetCurrentRowInBinding(DCIteratorBinding.java:1919)
    07/10/30 14:02:37 at oracle.adf.model.binding.DCIteratorBinding.getCurrentRow(DCIteratorBinding.java:1866)
    07/10/30 14:02:37 at oracle.adf.model.binding.DCIteratorBinding.prepareCurrentRow(DCIteratorBinding.java:548)
    07/10/30 14:02:37 at oracle.adf.model.binding.DCIteratorBinding.refreshControl(DCIteratorBinding.java:683)
    07/10/30 14:02:37 at oracle.adf.model.binding.DCIteratorBinding.refresh(DCIteratorBinding.java:3499)
    07/10/30 14:02:37 at oracle.adf.model.binding.DCBindingContainer.refreshExecutables(DCBindingContainer.java:2637)
    07/10/30 14:02:37 at oracle.adf.model.binding.DCBindingContainer.internalRefreshControl(DCBindingContainer.java:2568)
    07/10/30 14:02:37 at oracle.adf.model.binding.DCBindingContainer.refresh(DCBindingContainer.java:2260)
    07/10/30 14:02:37 at oracle.adf.controller.v2.lifecycle.PageLifecycleImpl.prepareRender(PageLifecycleImpl.java:534)
    07/10/30 14:02:37 at oracle.adf.controller.faces.lifecycle.FacesPageLifecycle.prepareRender(FacesPageLifecycle.java:99)
    07/10/30 14:02:37 at oracle.adf.controller.v2.lifecycle.Lifecycle$1.execute(Lifecycle.java:297)
    07/10/30 14:02:37 at oracle.adf.controller.v2.lifecycle.Lifecycle.executePhase(Lifecycle.java:116)
    07/10/30 14:02:37 at oracle.adf.controller.faces.lifecycle.ADFPhaseListener.mav$executePhase(ADFPhaseListener.java:29)
    07/10/30 14:02:37 at oracle.adf.controller.faces.lifecycle.ADFPhaseListener$1.before(ADFPhaseListener.java:426)
    07/10/30 14:02:37 at oracle.adf.controller.faces.lifecycle.ADFPhaseListener.beforePhase(ADFPhaseListener.java:77)
    07/10/30 14:02:37 at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:192)
    07/10/30 14:02:37 at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)
    07/10/30 14:02:37 at javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)
    07/10/30 14:02:37 at com.evermind.server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:65)
    07/10/30 14:02:37 at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl._invokeDoFilter(AdfFacesFilterImpl.java:228)
    07/10/30 14:02:37 at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl._doFilterImpl(AdfFacesFilterImpl.java:197)
    07/10/30 14:02:37 at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl.doFilter(AdfFacesFilterImpl.java:123)
    07/10/30 14:02:37 at oracle.adf.view.faces.webapp.AdfFacesFilter.doFilter(AdfFacesFilter.java:103)
    07/10/30 14:02:37 at com.evermind.server.http.EvermindFilterChain.doFilter(EvermindFilterChain.java:15)
    07/10/30 14:02:37 at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl._invokeDoFilter(AdfFacesFilterImpl.java:228)
    07/10/30 14:02:37 at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl._doFilterImpl(AdfFacesFilterImpl.java:197)
    07/10/30 14:02:37 at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl.doFilter(AdfFacesFilterImpl.java:123)
    07/10/30 14:02:37 at oracle.adf.view.faces.webapp.AdfFacesFilter.doFilter(AdfFacesFilter.java:103)
    07/10/30 14:02:37 at com.evermind.server.http.EvermindFilterChain.doFilter(EvermindFilterChain.java:17)
    07/10/30 14:02:37 at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:162)
    07/10/30 14:02:37 at com.evermind.server.http.EvermindFilterChain.doFilter(EvermindFilterChain.java:17)
    07/10/30 14:02:37 at oracle.security.jazn.oc4j.JAZNFilter.doFilter(JAZNFilter.java:436)
    07/10/30 14:02:37 at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:621)
    07/10/30 14:02:37 at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:370)
    07/10/30 14:02:37 at com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:871)
    07/10/30 14:02:37 at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:453)
    07/10/30 14:02:37 at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:302)
    07/10/30 14:02:37 at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:190)
    07/10/30 14:02:37 at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
    07/10/30 14:02:37 at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
    07/10/30 14:02:37 at java.lang.Thread.run(Thread.java:595)
    Has anyone seen this error before or can anyone explain this error? This problem is mission criticle to us so any help is appreciated. Without the boost of performance and unnecessary callbacks the application is just unusable.
    Thanks in advance,
    Robert

    Hi Frank,
    it seems that this issue is dependent to the renderModelIfNeeded phase. I still have no explanation for this behaviour. For now I've changed our implementation to use the prepareModel phase but I'm still not happy with the ADF phase implementation and documentation. Some methods that we use in the backend are called many times.
    I'll keep on trying to find a solution...
    Thanks
    Robert

  • ADF Faces: Cross context forward

    Hi all,
    I am trying to set up an simple example for a cross context forward from one ADF Faces/BC app to another. Can anyone provide me some code snipet to perform this?
    App1 has a page1.jsp, as soon as this page is brought up, i would like it to be automatically to forwarded to App2/page2.jsp.
    I have a javax.servlet.filter set up in App1, but i'm not exactly sure how to manipulate the doFilter method to explicitly set a new URL for the forward.
    Any suggestions is appreciated.
    Wes

    Hi,
    I don't think a forward works. Instead you need to perform a redirect
    Frank

Maybe you are looking for