UIX Bug - bc4j:setAttribute

The context:
We have a UIX form used to edit a view row. The 'save' event is executing a chain of bc4j:setAttribute events.
The bug:
The row contains an attribute having a null value. The corresponding text field into the form remains unchanged (empty). This means that on submit, the browser sends to the server a 'null' value. Unexpectedly, the setAttribute method for this attribute is invoked for the current ViewRowImpl. Since the value of the attribute is not changed, I am expecting a different behavior i.e. not invoking this method.
thanks

Hi,
This is a bug, which has been filed.
Thanks,
Gabrielle

Similar Messages

  • bc4j:setAttribute and validater

    Hi, the parser bug reported in this thread, has it been solved or is there any work around for it?
    UIX/XML: <bc4j:setAttribute> and <validater>
    Basically I want serverside BC4J field validation, there might be another way to get it done?
    Thanks, Jan

    Jan,
    Sorry, the bug fix has not been released externally. Registering the below UIExtension should work, though.
    Hope this helps,
    Ryan Pollock
    UIX Team
    import oracle.cabo.share.xml.ParserManager;
    import oracle.cabo.ui.UIConstants;
    import oracle.cabo.ui.UIExtension;
    import oracle.cabo.ui.laf.LookAndFeel;
    import oracle.cabo.ui.validate.ServerValidater;
    import oracle.cabo.ui.xml.parse.ClientValidaterFactory;
    public class FixValidate implements UIExtension
    public void registerSelf(ParserManager manager)
    // Work around UIX bug with ServerValidater parsing
    manager.register(ServerValidater.class,
    UIConstants.MARLIN_NAMESPACE,
    ClientValidaterFactory.sharedInstance());
    public void registerSelf(LookAndFeel laf)
    }

  • UIX/XML BC4J - Controlling page flow in event handlers

    We have an event handler that executes some data processing using bc4j tags, and need to redirect the flow to another page, based on the value of some parameters. For example, we have a checkbox Prepare for another insert, and we want to check for its state in the event handler to determine which page to display.
    We tried the following code
    UIX page event handler:
    <event name="saveEvent" >
         <bc4j:findRootAppModule name="TipoPunteggioViewAppModule" >
              <bc4j:findViewObject name="TipoPunteggioView" >
                   <bc4j:findRow name="CreateTipoPunteggioView" >
                        <bc4j:setPageProperty name="keyTipoPunteggio" >
                             <bc4j:stringKey />
                        </bc4j:setPageProperty>
                        <bc4j:setAttribute name="FlgObsoleto" />
                        <bc4j:setAttribute name="Firma" />
                        <bc4j:setAttribute name="TitTipoPunteggio" />
                        <bc4j:insertRow/>
                        <bc4j:commit/>
                        <bc4j:executeQuery/>
                        <ctrl:method class="com.websiteitalia.valutazioni.handlers.Handlers"
                             method="anotherInsertEventHandler" />
                   </bc4j:findRow>
              </bc4j:findViewObject>
         </bc4j:findRootAppModule>
    </event>
    Java method event handler:
    public static EventResult anotherInsertEventHandler(BajaContext bCtx,
                                       Page page,
                                       PageEvent event) {
         // AnotherInsert is the name of the checkbox on the page
    if ("on".equals(event.getParameter("AnotherInsert"))) {
              return new EventResult(page);
         } else {
              return new EventResult(new Page("ListPage"));
    When we return the same page, things work fine, but when we return another page we get an ArrayIndexOutOfBoundException. We have also noticed that if we return a simple page, without data scopes and bc4j tags, we get the correct result. We are probably wrong in the manner we do the redirect inside of a java event handler, because seems that the page we return is not completely processed.
    Can anyone explain the available techniques to control the page flow, using UIX XML tags or Java APIs alone or both of these together? For example, how can be replicated the <ctrl:go> behavior using Java APIs?

    The UIX page works correctly if loaded directly, the error takes place only when we redirect in this manner from a page that has a different application module / view object scopes. In fact, when we redirect to a page that have the same scopes of the first (or when the second page has not scopes at all the simple page) the error doesnt occur. Thats why we suppose that some step of the page rendering process arent executed correctly, it seems that the new page still finds some of the old page (the scopes)..
    To redirect to a page from a java event handler we have returned an event result with the next page (see above post for a code snippet), is this the correct way? Can we simulate the ctrl:go tag from the java code (with the redirect=true option)? There are any other?

  • Bc4j:setAttribute

    Hello to all of u,
    I face a strange problem and I would appreciated it if anyone could help.
    I am building a UIX XML application. I have changed the update_<view>.uix file to display to the user only the updatable columns. However when I try to change the Apply event I get a syntax error that the setAttribute element is not completed. Below you can see my code in the event handler:
    <event name="apply" >
    <bc4j:findRootAppModule name="DepartmentsViewAppModule">
    <bc4j:findViewObject name="DepartmentsView">
    <bc4j:findRow name="UpdateDepartmentsView">
    <bc4j:setAttribute name="DeptCode"/>
    <!-- commit the transaction -->
    <bc4j:commit/>
    <ctrl:go name="DepartmentsView_View" redirect="true" />
    </bc4j:findRow>
    </bc4j:findViewObject>
    </bc4j:findRootAppModule>
    </event>
    I cannot see any errors, and all the documentation I found on setAttribute state the same thing (I tried copy&paste too).
    I am not sure what version of UIX I am using, but I am using JDeveloper 9.0.2.822
    Thank u in advance
    Ioanna

    try setting paramName on <bc4j:setAttribute>. I'm guessing you might have an older version of UIX where this isn't getting defaulted.

  • UIX XML - BC4J +

    We are implementing a functionality to insert new elements using BC4J components and UIX XML.
    We have carefully followed istruction from the UIX developer's guide (Business Components for Java Integration) but we notice some problems
    that we suppose are due to RowDefs with autocreate=true and the KEY attribute management flow.
    The components implemented have:
    1) A create method implemented for setting entity primary key using a DB sequence and other default values:
         protected void create(AttributeList attributeList) {
              super.create(attributeList);
              SequenceImpl seq = new SequenceImpl("VA_TIPO_PUNTEGGIO_SEQ", getDBTransaction());
              setAttribute("IdTipoPunteggio", seq.getSequenceNumber());
              setDataAgg(new Date( new Timestamp(System.currentTimeMillis())));
    2) A validation rule that checks for duplicate description using a ListCompare:
    <ListValidationBean
    OnAttribute="TitTipoPunteggio"
    OperandType="SQL"
    Inverse="true"
    ListValue="select tit_tipo_punteggio from va_tipo_punteggio where id_tipo_punteggio &#60;&#62; %IdTipoPunteggio%" >
    </ListValidationBean>
    Our problems are:
    1) The ID taken from a DB Sequence are increased by 2 (this doesn't occur using test on application module), and we suppose that it happens because row isn't
    found using the correct KEY property.
    2) When the validation's rule is triggered, row data aren't reloaded
    UIX code for apply event is:
    <event name="saveEvent" >
         <bc4j:findRootAppModule name="TipoPunteggioViewAppModule" >
              <bc4j:findViewObject name="TipoPunteggioView" >
                   <bc4j:findRow name="newRow">
                        <bc4j:setPageProperty name="key" >
                             <bc4j:stringKey />
                        </bc4j:setPageProperty>
                        <bc4j:setAttribute name="IdTipoPunteggio" />
                        <bc4j:setAttribute name="TitTipoPunteggio" />
                        <bc4j:setAttribute name="FlgObsoleto" />
                        <bc4j:insertRow/>
                        <bc4j:commit/>
                        <bc4j:executeQuery/>
                        <ctrl:go redirect="true" name="Anagrafiche_TipiPunteggio"/>
                   </bc4j:findRow>
              </bc4j:findViewObject>
         </bc4j:findRootAppModule>
    </event>
    However we have doubts on the code flow because we suppose the following istruction are missing before the findRow tag:
    <bc4j:setPageProperty name="keyTipoPunteggio" >
         <bc4j:parameter name="keyTipoPunteggio"/>
    </bc4j:setPageProperty>
    otherwise what is the reason of the keyStamp tag declared on the region?
    Moreover we don't understand the purpose of these instructions:
    <bc4j:setPageProperty name="keyTipoPunteggio" >
         <bc4j:stringKey />
    </bc4j:setPageProperty>
    because when validation on the row occurs, data of the rejected row are not reloaded.
    Perhaps would be useful an HowTo or a detailed explanation of interaction between registryDefs and event handler tags.
    TIA

    Our problems are:
    1) The ID taken from a DB Sequence are increased by 2 (this doesn't occur using test on application module), and we suppose that it happens because row isn't found using the correct KEY property.This is correct.
    2) When the validation's rule is triggered, row data aren't reloaded
    UIX code for apply event is: <snip>
    Replace it with this:
    <event name="saveEvent" >
    <bc4j:findRootAppModule name="TipoPunteggioViewAppModule" >
    <bc4j:findViewObject name="TipoPunteggioView" >
    <bc4j:setPageProperty name="key" >
    <bc4j:parameter name="key" />
    </bc4j:setPageProperty>
    <bc4j:findRow name="newRow">
    <bc4j:setAttribute name="IdTipoPunteggio" />
    <bc4j:setAttribute name="TitTipoPunteggio" />
    <bc4j:setAttribute name="FlgObsoleto" />
    <bc4j:insertRow/>
    <bc4j:setPageProperty name="key" >
    <bc4j:stringKey />
    </bc4j:setPageProperty>
    <bc4j:commit/>
    <bc4j:executeQuery/>
    <ctrl:go redirect="true" name="Anagrafiche_TipiPunteggio"/>
    </bc4j:findRow>
    </bc4j:findViewObject>
    </bc4j:findRootAppModule>
    </event>
    The main issue is that the string representation of the key changes when the row is inserted into the view object. It is a "short" key before insert and a "long" key after insert. Also, "short" keys cannot be found by ViewObject APIs to locate rows when the key is still "short".
    Here is the flow:
    1. Create page is rendered, auto-creating a new row with "short" key.
    2. In apply event handler, we must set the page property based on the submitted key
    to find the same row. Unfortunately, the "short" key does not find the old row, so
    we end up creating a new one for this request (incrementing the sequence).
    3. We may get as far as inserting the new row, upgrading to a "long" key.
    4. So we update the page property after a successful insert to the new "long" key.
    5. We rerender the page and use the page property to find the row, most likely the "long" key.
    [Note: if an exception occurred during set attribute, before insert row, the key will still
              be "short"]
    6. Once we get as far as attempting insertRow, the key will become "long" and locatable by
    ViewObject APIs.
    You don't encounter this problem in the tester because it can keep an in-memory handle to the row it
    is trying to insert for the duration of the insert attempt.
    The web-based UI relies on key-based references instead, which have the issue outlined above.
    We will follow up on this to see if "short" keys can be located by ViewObject APIs in future, allowing
    the same reference to be found across requests.
    Regards,
    John Fallows.

  • Anyone deploy ADF(UIX,Struts,BC4J) to 9iAS 9.02?

    Has anyone been successful in deploying a ADF 10g app using UIX/Struts/BC4J to Oracle 9iAS 9.02?

    Deploying a UIX application directly from JDeveloper 10g to iAS 9.0.2 isn't supported out of the box. You can deploy directly to iAS 10g (9.0.4), standalone OC4J 10g (9.0.4) instances (one is included with JDeveloper 10g), iAS 9.0.3 Java edition, standalone OC4J 9.0.3, and selected third party servlet engines.
    There are two issues that you would need to workaround to deploy a 10g ADF application to iAS 9.0.2. One issue is that 9.0.2 versions of some of the ADF libraries (BC4J and UIX for example) are on the global application.xml classpath of the iAS 9.0.2 customer home OC4J instance. You would need to manually upgrade your 9.0.2 instance to have all of the ADF 10g libraries. The second issue is that some of the ADF 10g libraries (like BC4J) require JDK 1.4, and iAS 9.0.2 shipped with an earlier version of the JDK. I personally don't know if using iAS 9.0.2 with JDK 1.4 is a supported combination, but I will try to find out for you.
    By the way, you might wonder why we don't have these same problems with with iAS 9.0.3 and 9.0.4 since the ADF 10g libraries are more recent than what shipped with those releases. In OC4J 9.0.3 and 9.0.4 there is a "search-local-classes-first" option in orion-web.xml that allows classes provided as part of a web application to be loaded in preference to what is on the global application.xml classpath. We use this feature to deploy ADF 10g applications (and include the JARs for some of the ADF libraries in the WEB-INF/lib of the application). In addition, there is a tool called the ADF Installer that is part of JDeveloper that will upgrade versions of some of the backward compatible ADF libraries (like BC4J) in the global application.xml.

  • 10g UIX / Struts / BC4J

    We are searching for best practices for developping secure web applications using uix / struts / bc4j that demonstrates different login scenario and connection pooling with the database. Did somebody find something in documentation ? or a great book that expose this problematic ?

    Hi, I am also looking for a document or procedure like that.
    Did you get any help, or found any way to do that ?
    Can you share with me ?
    I will appreciate if you could have some time to share the ideas ?

  • Are JDev9i UIX and BC4J application server dependent?

    Are UIX and BC4J application server dependent?
    If I use JDeveloper9i to build an application using UIX XML + BC4J + Java, then can this be deployed on IBM Websphere, Web Logic, Oracle 9iAS, etc...?

    BC4J and UIX are not tied to any application server. They are "just" a collection of jar files that you can deploy to any application server.
    Check out the how-to section to see the doc about deploying BC4J to other application servers at:
    http://otn.oracle.com/products/jdev/howtos/content.html
    (more info in the online help).
    Also check out otn's home page later today for a daily feature about BC4J openness.

  • UIX XML BC4J Choice

    Adam, In a previous thread In cactus, it has problem to generate report you mentioned that in order to implement a Choice within UIX/XML/BC4J one would have to write some code to do it. Specifically,
    1. Implement the oracle.cabo.ui.data.DataObjectList interface to wrap up the results of a BC4J query ...
    2. Write a MethodDataProvider ....
    3. Access the Method and display the Choices.
    Can you JDEV guys post a WORKING example of how to do it?
    An "EDIT.UIX" page where the USER makes a selection from the drop-down-list (Choice) and then updates the record with that selection would be nice.
    Bill G...

    Beautiful!
    I'll will look at implementing this over the weekend. I made a decision to temporarily go with UIX-JSP since I did not know how to implement a "UIX XML BC4J Choice".
    Now that you've delivered it I should be able to convert some of my UIX-JSP apps to UIX/XML.
    Thank You Good Buddy! (Think truck driver accent)
    Bill G...

  • BC4J/Jedeveloper 3.2 BUG with SetAttribute on LONG RAW

    Hi,
    I'm using Jdeveloper 3.2, a BC4J/JSP application and a Oracle Thin connection to Oracle 8.0.4.
    I think I found a bug in BC4J:
    I have a table with a LONG RAW column that is also used by other (non BC4J)
    applications to store binary data (including, but not limited to JPG's)
    I'm able to retrieve data of any size using GetAttribute().
    When I use the following code from a WebBean, it fails on commit
    when the file is bigger than 4K.
    The error is:
    Error Message: JBO-26041: Failed to post data to database during "Update":
    SQL Statement " UPDATE BDATA Bdata SET LRDATA=:1 WHERE ID_CARD=:2 AND CODE_REGISTRATION=:3".
    Error Message: ORA-01461: can bind a LONG value only for insert into a LONG column
    public void setData(java.io.File f) throws Exception
    long len = f.length();
    InputStream in = new FileInputStream(f);
    Row myRow = qView.getCurrentRow();
    byte[] buffer = new byte[(int)len];
    in.read(buffer, 0, (int) len);
    in.close();
    Raw myval = new Raw(buffer);
    myRow.setAttribute("Lrdata", myval);
    Please help, I need this to work !
    null

    Raw domain is limited to the oracle-JDBC limitations of 4K length for such-streaming data types unless a Stream is used to update the data. We plan to support such streaming for Raw domain in the next major-release.
    However, you should be able to work with Raw domain and if your data size is bigger than 4K, override the doDML() method in EntityImpl (that contains the Raw attribute) and perform a custom update for the Raw data. Basically the logic will be something like:
    doDML()
    1. save the raw attribute value
    2. Populate 'null' or a single byte-bytearray for raw attribute value so that super.doDML() won't fail.
    3. prepare an update statement with just the raw column and where clause for this entity's primary key.
    4. fill in the raw data using an in-memory stream over the bytes from the Raw domain instance held in step 1. Use Statement.setBinaryStream() method.
    5. execute the statement (to post the stream).
    6. re-populate the entity data-structure with the valid Raw domain instance.
    null

  • UIX XML-BC4J: Bug on messageTextInput

    We have found a bug on the BC4J:messageTextInput tag because it doesn't use the value of "prompt" attribute to generate client validating messages.
    Message alerts displayed on browser are on the following form:
    Form Validation failures: a value must be entered for ''
    PS: this problem did not occur with BC4J:messageInput but we can't use it because it doesn't support the onSubmitValidater inner tag to specify the field type.

    Try explicitly setting the "id" to a unique value; that should fix the problem.
    It is a bug, but one that won't be fixed for 9.0.3.

  • UIX/XML BC4J  Bug on "selectedValue" attribute

    We suspect a bug in tag bc4j:attrProperty when used within boundAttribute because bounding
    it to property selectedIndex works correctly, while bounding it to selectedValue result in a
    Servlet error: Renderer failed: java.lang.ArrayIndexOutOfBoundsException
    Correctly executed code (but logically wrong):
    <bc4j:attrScope name="FlgObsoleto">
    <contents>
         <messageChoice name="FlgObsoleto" prompt="Stato">
              <boundAttribute name="selectedIndex">
                   <bc4j:attrProperty name="value"/>
              </boundAttribute>
              <contents>
                   <option value="2" text="Element 0"/>
                   <option value="0" text="Element 1"/>
                   <option value="34" text="Element 2"/>
              </contents>
         </messageChoice>
    </contents>
    </bc4j:attrScope>
    Code resulting in error (but logically correct):
    <bc4j:attrScope name="FlgObsoleto">
    <contents>
         <messageChoice name="FlgObsoleto" prompt="Stato" >
              <boundAttribute name="selectedValue">
                   <bc4j:attrProperty name="value"/>
              </boundAttribute>
              <contents>
                   <option value="2" text="Element 0"/>
                   <option value="0" text="Element 1"/>
                   <option value="34" text="Element 2"/>
              </contents>
         </messageChoice>
    </contents>
    </bc4j:attrScope>

    The infamous ArrayIndexOutOfBoundsException - argh. This always means
    some other, real exception has happened. In this case, it's a
    ClassCastException as some bad code of ours blindly casted to
    String. This is fixed in 9.0.3. In 9.0.2, there's a clumsy
    workaround to force the attribute type to a string and dodge the bug.
    Change this one instance of:
    <bc4j:attrProperty name="value"/> to:
    <concat>
      <bc4j:attrProperty name="value"/>
      <fixed text=""/>
    </concat>Ugly. Very, very ugly!

  • UIX-XML BC4J - Unexpected errors using paths and DeltaTree on a particular UIX page

    We are using a PageDescription to dynamically change a UIX tree using the DeltaTree technique described in the Dynamic Structure for For UIX Pages chapter of the UIX Developers Guide.
    We search for a particular node using PathUtils.FindPathWithNodeID(RenderingContext context, UINode from, java.lang.String nodeID), but this fails when the page contains nested ViewObjectScopes.
    The method throws a NullPointerException, and the render fails:
    29/08/02 9.08 Valutazioni: java.lang.NullPointerException
         oracle.cabo.ui.data.DataObjectList oracle.cabo.ui.collection.DataObjectListNodeList.getDataObjectList(oracle.cabo.ui.RenderingContext)
         int oracle.cabo.ui.collection.DataObjectListNodeList.size(oracle.cabo.ui.RenderingContext)
         int oracle.cabo.ui.BaseUINode.getIndexedChildCount(oracle.cabo.ui.RenderingContext)
         boolean oracle.cabo.ui.path.PathUtils._findPath(oracle.cabo.ui.RenderingContext, oracle.cabo.ui.path.PathImpl, oracle.cabo.ui.UINode, oracle.cabo.ui.path.PathUtils$Finder)
         boolean oracle.cabo.ui.path.PathUtils._findPath(oracle.cabo.ui.RenderingContext, oracle.cabo.ui.path.PathImpl, oracle.cabo.ui.UINode, oracle.cabo.ui.path.PathUtils$Finder)
         boolean oracle.cabo.ui.path.PathUtils._findPath(oracle.cabo.ui.RenderingContext, oracle.cabo.ui.path.PathImpl, oracle.cabo.ui.UINode, oracle.cabo.ui.path.PathUtils$Finder)
         boolean oracle.cabo.ui.path.PathUtils._findPath(oracle.cabo.ui.RenderingContext, oracle.cabo.ui.path.PathImpl, oracle.cabo.ui.UINode, oracle.cabo.ui.path.PathUtils$Finder)
         boolean oracle.cabo.ui.path.PathUtils._findPath(oracle.cabo.ui.RenderingContext, oracle.cabo.ui.path.PathImpl, oracle.cabo.ui.UINode, oracle.cabo.ui.path.PathUtils$Finder)
         boolean oracle.cabo.ui.path.PathUtils._findPath(oracle.cabo.ui.RenderingContext, oracle.cabo.ui.path.PathImpl, oracle.cabo.ui.UINode, oracle.cabo.ui.path.PathUtils$Finder)
         boolean oracle.cabo.ui.path.PathUtils._findPath(oracle.cabo.ui.RenderingContext, oracle.cabo.ui.path.PathImpl, oracle.cabo.ui.UINode, oracle.cabo.ui.path.PathUtils$Finder)
         boolean oracle.cabo.ui.path.PathUtils._findPath(oracle.cabo.ui.RenderingContext, oracle.cabo.ui.path.PathImpl, oracle.cabo.ui.UINode, oracle.cabo.ui.path.PathUtils$Finder)
         boolean oracle.cabo.ui.path.PathUtils._findPath(oracle.cabo.ui.RenderingContext, oracle.cabo.ui.path.PathImpl, oracle.cabo.ui.UINode, oracle.cabo.ui.path.PathUtils$Finder)
         boolean oracle.cabo.ui.path.PathUtils._findPath(oracle.cabo.ui.RenderingContext, oracle.cabo.ui.path.PathImpl, oracle.cabo.ui.UINode, oracle.cabo.ui.path.PathUtils$Finder)
         boolean oracle.cabo.ui.path.PathUtils._findPath(oracle.cabo.ui.RenderingContext, oracle.cabo.ui.path.PathImpl, oracle.cabo.ui.UINode, oracle.cabo.ui.path.PathUtils$Finder)
         boolean oracle.cabo.ui.path.PathUtils._findPath(oracle.cabo.ui.RenderingContext, oracle.cabo.ui.path.PathImpl, oracle.cabo.ui.UINode, oracle.cabo.ui.path.PathUtils$Finder)
         oracle.cabo.ui.path.Path oracle.cabo.ui.path.PathUtils._findPath(oracle.cabo.ui.RenderingContext, oracle.cabo.ui.UINode, oracle.cabo.ui.path.PathUtils$Finder)
         oracle.cabo.ui.path.Path oracle.cabo.ui.path.PathUtils.findPathWithNodeID(oracle.cabo.ui.RenderingContext, oracle.cabo.ui.UINode, java.lang.String)
         oracle.cabo.ui.UINode com.websiteitalia.wsdk.uix.pageflow.PageFlowManager.getRootUINode()
         oracle.cabo.ui.UINode oracle.cabo.servlet.ui.UINodePageDescriptionProxy.getRootUINode()
         oracle.cabo.ui.UINode oracle.cabo.servlet.ui.UINodePageRenderer.getRootUINode(oracle.cabo.servlet.BajaContext, oracle.cabo.ui.RenderingContext, oracle.cabo.servlet.Page)
         oracle.cabo.ui.UINode oracle.cabo.servlet.ui.HTMLUINodePageRenderer.getRootUINode(oracle.cabo.servlet.BajaContext, oracle.cabo.ui.RenderingContext, oracle.cabo.servlet.Page)
         void oracle.cabo.servlet.ui.UINodePageRenderer.renderPage(oracle.cabo.servlet.BajaContext, oracle.cabo.servlet.Page)
         void oracle.cabo.servlet.AbstractPageBroker.renderPage(oracle.cabo.servlet.BajaContext, oracle.cabo.servlet.Page)
         oracle.cabo.servlet.Page oracle.cabo.servlet.PageBrokerHandler.handleRequest(oracle.cabo.servlet.BajaContext)
         void oracle.cabo.servlet.BajaServlet.doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
         void javax.servlet.http.HttpServlet.service(com.evermind.server.http.EvermindHttpServletRequest, com.evermind.server.http.EvermindHttpServletResponse)
         void javax.servlet.http.HttpServlet.service(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
         void javax.servlet.http.HttpServlet.service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
         void com.evermind.server.http.ServletRequestDispatcher.invoke(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
         void com.evermind.server.http.ServletRequestDispatcher.forwardInternal(javax.servlet.ServletRequest, javax.servlet.http.HttpServletResponse)
         boolean com.evermind.server.http.HttpRequestHandler.processRequest(com.evermind.server.ApplicationServerThread, com.evermind.server.http.EvermindHttpServletRequest, com.evermind.server.http.EvermindHttpServletResponse, java.io.InputStream, java.io.OutputStream, boolean)
         void com.evermind.server.http.HttpRequestHandler.run(java.lang.Thread)
         void com.evermind.util.ThreadPoolThread.run()
    We found the element of the UIX page that causes the problem:
    <bc4j:viewObjectScope name="ElementsView" >
    <contents>
         <bc4j:rowScope name="NewElement" >
         <contents>     
              <bc4j:region automatic="false" >
                   <bc4j:key>
                        <bc4j:rowKey name="keyElement"/>
                   </bc4j:key>
                   <contents>
                        <bc4j:attrScope name="FlgState">
                        <contents>
                             <messageChoice name="FlgState" prompt="State" >
                                  <boundAttribute name="selectedValue">
                                       <concat>
                                            <bc4j:attrProperty name="value"/>
                                            <fixed text=""/>
                                       </concat>
                                  </boundAttribute>
                                  <contents>
                                       <!-- This is the nested vo scope causing the error -->
                                       <bc4j:viewObjectScope name="DecodeStateView" >
                                       <contents data:childData="list@DecodeState">
                                            <option data:value="StateCode"
                                                 data:text="StateDescription"/>
                                       </contents>
                                       </bc4j:viewObjectScope>
                                  </contents>
                             </messageChoice>
                        </contents>
                        </bc4j:attrScope>
                   </contents>
              </bc4j:region>
         </contents>
         </bc4j:rowScope>
    </contents>
    </bc4j:viewObjectScope>
    This usage of nested view object scopes has been explained in reply of a previous post, How to databind the children of a UIX XML choice, and before ours attempts to modify the tree it worked fine. Removing the nested view object scope the page makes the page render correctly, but we need it to retrieve the description of its state.
    We get the same behaviour (and a much similar stack trace, with the same oracle.cabo.ui.data.DataObjectList oracle.cabo.ui.collection.DataObjectListNodeList.getDataObjectList (oracle.cabo.ui.RenderingContext) throwing a NullPointerException) if we use NodeUtils.createPreorderDescendentAttributeEnumeration method instead of PathUtils.

    It's a bug in the DataObjectListNodeList class that's up at the top of
    the stack. It's been fixed for 9.0.3. The bit of XML that's triggering
    it isn't the <viewObjectScope>s, but the "data:childData".
    I believe you can workaround this bug by not passing a null RenderingContext to
    findPathWithNodeID(). Now, you don't have a real RenderingContext, and we
    don't especially need one - "null" is legit here, but I think if
    you just pass "new oracle.cabo.ui.RootRenderingContext()" then you'll
    get around this bug.

  • UIX XML & BC4J Editable Tables

    How to process the changes on a bc4j table with editable columns (in UIX XML)?
    We can read the values, but when we try to update the view object, it occurs an error saying that the read value is not serializable.

    I think the problem is that you are not getting at the viewObject correctly in your eventHandler.
    First, in the uiXML file, the handler should be something like:
                <ctrl:handlers>
                  <ctrl:event name="..." >
                    <bc4j:findRootAppModule name="EmpAppModuleLocal" >
                      <bc4j:findViewObject name="AllEmpsVO" >
                        <ctrl:method class="yourClass"
                                     method="applyChanges"/>
                        <bc4j:commit/>
                      </bc4j:findViewObject>
                    </bc4j:findRootAppModule>
                  </ctrl:event>
                </ctrl:handlers>Then you can write your applyChanges method like this:
    public static EventResult applyChanges(BajaContext context,
                                           Page page,PageEvent event)
      ViewObject view = (ViewObject) context.getProperty(
                JboConstants.BC4J_NAMESPACE,
                JboConstants.VIEW_OBJECT_PROPERTY);
      view.getCurrentRow().setAttribute("Ename","Smith");
      return null;
    }Please see:
    http://otn.oracle.com/jdeveloper/help/topic?inOHW=true&file=jar%3Afile%3A/u01/webapps/OHW/ohw-app/jdeveloper/helpsets/jdeveloper/uix_devguide_ohj.jar!/bc4j.html&linkHelp=false#HandlingEvents
    http://otn.oracle.com/jdeveloper/help/topic?inOHW=true&file=jar%3Afile%3A/u01/webapps/OHW/ohw-app/jdeveloper/helpsets/jdeveloper/uixref.jar!/bc4j/findViewObject.html&linkHelp=false

  • UIX/Struts+BC4J Comparision

    In one project, I'll develope a Thin-client Web-based appliation, this is my hypo architecture:
    1. JSP+Struts+Tomcat+Oracle 9i
    2. JSP+UIX+BC4J+Tomcat+Oracle 9i,
    I'm a newbie to Oracle UIX, can anybody give me suggestion about the comparision between Struts and UIX ?
    or How about the second architecture?
    Welcome any comment/advice.
    Thanks in advance.
    Jack

    You posted this question twice; see my answer to the other message.

Maybe you are looking for

  • Scroll in safari, Scroll bar not working in Safari

    Scroll bar does not show up in Safari. Worked fine until last update. Works fine in Firefox. www.scottlerman.com

  • Factory unlocked phones - iTunes store

    I am in manila for the next year and contemplating trading in this piece of garbage Blackberry for a factory unlocked iphone4. Supposedly I can use it on any carrier, but I don't understand the details, its hard to get consistent information here. Ca

  • No of users

    Hi I want to know the no. of users who logged on my SAP system on the previous days. Is it possible? hoping for a quick reply

  • CSM TCL script or http checksum

    Hello, I need to do some HTTP keepalive based on the http page itself (no error code returned by the server). With the CSS we were able to do it because the css was doing a checksum of the http page. So when there was changes the service was consider

  • Image size requirements

    There are certain size requirements that I have for submitting an image for a juried show.  The image must be at least 1400 pixels on the longest side, at least 72 dpi and no more than 2mb.  Every time I try to change the image size to 1400 the mb is