<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1126849756442500422</id><updated>2011-07-29T12:44:10.484-07:00</updated><category term='wls'/><category term='weblogic server'/><category term='modified on'/><category term='custom popup'/><category term='audit column'/><category term='adf pinDataControl pinning datacontrol changeeventpolicy change event policy'/><category term='how to create custom adf component'/><category term='adf partialTrigger syntax findComponent'/><category term='osx'/><category term='created on'/><category term='adf'/><category term='entity'/><category term='jdeveloper'/><category term='jdeveloper svn subversion npe'/><category term='bind variable'/><category term='declarative adf component'/><category term='groovy'/><category term='ADF Library JAR file'/><category term='modified by'/><category term='panelCollection toolbar buttons disabled'/><category term='mac'/><category term='created by'/><category term='Taskflow bindings executables release train stop reexecute'/><category term='af:popup'/><category term='history column'/><category term='view accessor'/><category term='adf tag lib'/><category term='filenotfoundexception'/><title type='text'>ADF Bits</title><subtitle type='html'>I will share problems, and hopefully, with most of them, solutions hand picked from what I run into on a daily basis with Oracle's JDeveloper 11G and ADF.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://adfbits.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://adfbits.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jesse</name><uri>http://www.blogger.com/profile/03073167674153637139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1126849756442500422.post-77611639795551203</id><published>2010-09-23T08:32:00.000-07:00</published><updated>2010-09-23T08:52:02.253-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jdeveloper svn subversion npe'/><title type='text'>NPE when configuring Subversion in JDeveloper</title><content type='html'>I haven't been using the SVN capabilities built in to JDeveloper for my local dev environment, but instead have been using Smart SVN (I'm on OS X, and wish I could Tortoise SVN). The trial version of Smart SVN does not enable some features, such as Branching and Tagging. I have a need to do this from my local machine and would prefer to do so in a GUI. Anwyay, I'm trying to do a check out from JDeveloper (11.1.1.1.0 Build JDEVADF_11.1.1.1.0_GENERIC_090615.0017.5407), and since I have not done so in this install of JDev, I have to first configure the SVN connection. Well, as soon as I click the 'Test Connection' button I get a Null Pointer Exception:&lt;br /&gt;&lt;br /&gt;&lt;div class="adfcode adflongcode"&gt;"Performing action Check Out...[ from oracle.ide.ceditor.CodeEditor ]&lt;br /&gt;Invoking command: [ from oracle.ide.ceditor.CodeEditor ]&lt;br /&gt;Uncaught exception&lt;br /&gt;java.lang.NullPointerException&lt;br /&gt;  o.ji.vcs.svn.util.SVNRepositoryInfoValidator.validate(SVNRepositoryInfoValidator.java:58)&lt;br /&gt;  o.ji.vcs.svn.nav.ui.ConnectionPanel$ConnectionTesterThread.run(ConnectionPanel.java:412)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The solution is to remove/rename the existing preferences.xml (and possibly the repositories.xml) under the JDeveloper install directory:&lt;br /&gt;&lt;br /&gt;%JDEV_HOME%/jdeveloper/system11.1.1.1.33.54.07/o.jdeveloper.subversion&lt;br /&gt;&lt;br /&gt;Many Thanks to &lt;a href="http://programming.itags.org/development-tools/70633/"&gt;Nick&lt;/a&gt; for help on resolving this issue.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1126849756442500422-77611639795551203?l=adfbits.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adfbits.blogspot.com/feeds/77611639795551203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1126849756442500422&amp;postID=77611639795551203' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/77611639795551203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/77611639795551203'/><link rel='alternate' type='text/html' href='http://adfbits.blogspot.com/2010/09/npe-when-configuring-subversion-in.html' title='NPE when configuring Subversion in JDeveloper'/><author><name>Jesse</name><uri>http://www.blogger.com/profile/03073167674153637139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1126849756442500422.post-8535613168613654665</id><published>2010-02-03T07:34:00.000-08:00</published><updated>2010-02-03T07:46:08.204-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wls'/><category scheme='http://www.blogger.com/atom/ns#' term='weblogic server'/><category scheme='http://www.blogger.com/atom/ns#' term='filenotfoundexception'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='jdeveloper'/><title type='text'>Running with Integrated WLS fails on Mac OS (8681385)</title><content type='html'>Loaded a different version of JDeveloper (Build JDEVADF_11.1.1.1.0_GENERIC_090615.0017.5407) today and ran into an issue that I knew I had seen before, which I think must have been cleared up with 11.1.1.2.0:&lt;br /&gt;&lt;br /&gt;&lt;div class="adfcode adflongcode"&gt;[08:26:20 AM] ####  Deployment incomplete.  ####&lt;br /&gt;java.io.FileNotFoundException: /var/folders/fc/fcBxVMI8GS8ilNvLNsNQ6U   TI/-Tmp-/adfmeta1829925691998595481.xml (No such file or directory)&lt;br /&gt; at java.io.FileOutputStream.open(Native Method)&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This is a known issue and is resolved by adding the following to the jdev.conf file:&lt;br /&gt;&lt;div class="adfcode"&gt;AddVMOption -Djava.io.tmpdir=/var/tmp&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1126849756442500422-8535613168613654665?l=adfbits.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.oracle.com/technology/products/jdev/htdocs/11/11.1.1.1/knownissues.html' title='Running with Integrated WLS fails on Mac OS (8681385)'/><link rel='replies' type='application/atom+xml' href='http://adfbits.blogspot.com/feeds/8535613168613654665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1126849756442500422&amp;postID=8535613168613654665' title='39 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/8535613168613654665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/8535613168613654665'/><link rel='alternate' type='text/html' href='http://adfbits.blogspot.com/2010/02/running-with-integrated-wls-fails-on.html' title='Running with Integrated WLS fails on Mac OS (8681385)'/><author><name>Jesse</name><uri>http://www.blogger.com/profile/03073167674153637139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>39</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1126849756442500422.post-7927173553997186719</id><published>2009-12-03T06:36:00.000-08:00</published><updated>2009-12-03T06:56:34.413-08:00</updated><title type='text'>Session Level Shared AM is not what you think (or what the manual says!)</title><content type='html'>The JDeveloper manual gives the following definition for Session Level Shared Application Module:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;If a view object instance queries data that depends on the current user, then the query can be cached at the session level and shared by all components that reference the row-set cache. For example, the session-level shared application module might contain a view instance with data security that takes a manager as the current user to return the list of direct reports. In this case, the cache of direct reports would exist for the duration of the manager's session.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;After hours of failure, I found a discussion in the &lt;a href="http://forums.oracle.com/forums/thread.jspa?messageID=3769554&amp;#3769554"&gt;JDeveloper and ADF forum&lt;/a&gt; describing this issue.&lt;br /&gt;&lt;br /&gt;In that post, Steve Muench offers the following explanation, (and subsequently has opened a bug on the Manual's faulted description):&lt;br /&gt;&lt;i&gt;The session scope shared application module is related to the ADFBC Session (SessionImpl) which cooperates with the Transaction object and is related to a single root application module. It is not shared across distinct root application modules. So, I don't believe that you're getting the sharing that you were expecting here.&lt;br /&gt;&lt;br /&gt;The only thing that is shared across different root application modules would be an application-scope shared AM, or else something that the controller layer could make available like the HTTP Session, or one of the scopes like pageFlowScope which is managed distinctly from the number of root application modules used by the task flow.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Steve eventually points out that not all is lost trying to share view objects at a higher level than pageFlowScope:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;If you can make the language a bind variable in the query, then you could use the application-shared AM. The shared rowsets are cached by unique bind variable combinations.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Since, I wanted to share my lookups for a given user based upon a given bind variable anyway, this will work just as I would like it to, and in fact slightly even better, because now it will be shared across all users, but still maintain a per user uniqueness. The manual describes how to do this pretty well, but you can ignore the other document bug (as pointed out in one of Avrom's &lt;a href="http://www.avromroyfaderman.com/2008/09/shared-application-module-instance-tricks-part-ii-displaying-data/"&gt;Post&lt;/a&gt;s):&lt;br /&gt;&lt;br /&gt;&lt;i&gt;When viewing a data control usage from the DataBindings.cpx file in the Structure window, do not set the Configuration property to a shared application module configuration. By default, for an application module named AppModuleName, the Property Inspector will list the configurations named AppModuleNameShared and AppModuleNameLocal. At runtime, Oracle ADF uses the shared configuration automatically when you configure an application as a shared application module, but the configuration is not designed to be used by an application module data control usage&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Go ahead and &lt;i&gt;select the data control in question in the Structure Window for the DataBindings.cpx file and in the property inspector, set the configuration it should use to be the YourAppModuleShared configuration.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1126849756442500422-7927173553997186719?l=adfbits.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adfbits.blogspot.com/feeds/7927173553997186719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1126849756442500422&amp;postID=7927173553997186719' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/7927173553997186719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/7927173553997186719'/><link rel='alternate' type='text/html' href='http://adfbits.blogspot.com/2009/12/session-level-shared-am-is-not-what-you.html' title='Session Level Shared AM is not what you think (or what the manual says!)'/><author><name>Jesse</name><uri>http://www.blogger.com/profile/03073167674153637139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1126849756442500422.post-2699916386882413844</id><published>2009-11-17T08:17:00.000-08:00</published><updated>2009-12-02T15:06:32.222-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adf'/><category scheme='http://www.blogger.com/atom/ns#' term='bind variable'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='view accessor'/><title type='text'>Referencing Bind Variables in Groovy</title><content type='html'>Thanks to Steve Muench for #143, 'Referencing UserData Map Values from View Object Bind Variables in Groovy' from &lt;a href="http://blogs.oracle.com/smuenchadf/examples/"&gt;Not Yet Documented ADF Sample Applications&lt;/a&gt; for help on figuring this one out.&lt;br /&gt;&lt;br /&gt;I needed a ViewAccessor of my ViewObject to execute based upon a parameter calculated at run time. Generally, ViewAccessors, with required bind variables, are executed based upon an attribute in the main ViewObject, but in my case my ViewObject had no values for its attributes, because I was using it as a searchRegion (for the data binding of an af:query component) and although the I was setting the bind variable as the first step in my task-flow, the attribute on which I was trying to base the ViewAccessor's bind variable would always return null. So I created the following class that can be called via Groovy:&lt;br /&gt;&lt;br /&gt;&lt;div class="adfcode adflongcode"&gt;package com.mycompany.myproject.model.util;&lt;br /&gt;&lt;br /&gt;import oracle.adf.model.bean.DCDataRow;&lt;br /&gt;&lt;br /&gt;import oracle.jbo.ExprValueSupplier;&lt;br /&gt;import oracle.jbo.JboReservedVarNames;&lt;br /&gt;import oracle.jbo.Row;&lt;br /&gt;import oracle.jbo.StructureDef;&lt;br /&gt;import oracle.jbo.ViewObject;&lt;br /&gt;import oracle.jbo.common.ViewCriteriaRowImpl;&lt;br /&gt;import oracle.jbo.server.ViewRowImpl;&lt;br /&gt;&lt;br /&gt;public class VOUtils {&lt;br /&gt;    &lt;br /&gt;    public static Object bindValue(ViewObject vo, String bindName) {&lt;br /&gt;        return vo.getNamedWhereClauseParam(bindName);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    /*&lt;br /&gt;     * Returns the value of the namedWhereClauseParam from the supplied VO.&lt;br /&gt;     * This was created so that bind variables values could be accessed via Groovy&lt;br /&gt;     * &lt;br /&gt;     * Groovy Example:&lt;br /&gt;     *  com.synergetic.sis.model.util.VOUtils.bindValue(adf.object,"AgencyIdBind")&lt;br /&gt;     *&lt;br /&gt;     */&lt;br /&gt;    public static Object bindValue(ExprValueSupplier valSupplier, String bindName) {&lt;br /&gt;        if (valSupplier instanceof Row) {&lt;br /&gt;            return bindValueFromRow((Row)valSupplier, bindName);&lt;br /&gt;        } else {&lt;br /&gt;            StructureDef sd =&lt;br /&gt;                (StructureDef)valSupplier.getExprVarVal(JboReservedVarNames.RESERVED_VAR_STRUCTURE_DEF);&lt;br /&gt;            if (sd instanceof ViewObject) {&lt;br /&gt;                return bindValue((ViewObject)sd, bindName);&lt;br /&gt;            } else if (sd instanceof Row) {&lt;br /&gt;                return bindValueFromRow((Row)sd, bindName);&lt;br /&gt;            } else {&lt;br /&gt;                System.out.println("Didn't handle case when valueSupplier was a " +&lt;br /&gt;                                   sd.getClass().getName());&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        return null;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public static Object bindValueFromRow(Row row, String bindName) {&lt;br /&gt;        ViewObject vo = null;&lt;br /&gt;        if (row instanceof DCDataRow) {&lt;br /&gt;            Object dp = ((DCDataRow)row).getDataProvider();&lt;br /&gt;            if (dp instanceof ViewCriteriaRowImpl) {&lt;br /&gt;                vo = ((ViewCriteriaRowImpl)dp).getViewCriteria().getViewObject();&lt;br /&gt;            }&lt;br /&gt;        } else {&lt;br /&gt;            vo = ((ViewRowImpl)row).getViewObject();&lt;br /&gt;        }&lt;br /&gt;        if (vo != null) {&lt;br /&gt;            return bindValue(vo, bindName);&lt;br /&gt;        }&lt;br /&gt;        return null;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This class can then be used to lookup the value of the ViewObject's bind variable using the following Groovy expression:&lt;br /&gt;&lt;div class="adfcode"&gt;com.mycompany.myproject.model.util.VOUtils.bindValue(adf.object,"BindVariableName")&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1126849756442500422-2699916386882413844?l=adfbits.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adfbits.blogspot.com/feeds/2699916386882413844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1126849756442500422&amp;postID=2699916386882413844' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/2699916386882413844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/2699916386882413844'/><link rel='alternate' type='text/html' href='http://adfbits.blogspot.com/2009/11/referencing-bind-variables-in-groovy.html' title='Referencing Bind Variables in Groovy'/><author><name>Jesse</name><uri>http://www.blogger.com/profile/03073167674153637139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1126849756442500422.post-3084560839087850682</id><published>2009-11-11T07:35:00.000-08:00</published><updated>2009-11-11T07:51:25.760-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='entity'/><category scheme='http://www.blogger.com/atom/ns#' term='created by'/><category scheme='http://www.blogger.com/atom/ns#' term='adf'/><category scheme='http://www.blogger.com/atom/ns#' term='modified by'/><category scheme='http://www.blogger.com/atom/ns#' term='audit column'/><category scheme='http://www.blogger.com/atom/ns#' term='modified on'/><category scheme='http://www.blogger.com/atom/ns#' term='history column'/><category scheme='http://www.blogger.com/atom/ns#' term='created on'/><title type='text'>History Columns</title><content type='html'>When using the automatic audit feature of ADF's entity object, DO NOT check the Refresh After Insert or Refresh After Update checkboxes. These will prevent the columns from being updated with proper values.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JreCrYrWtLc/Svrcz3uRbdI/AAAAAAAAAE4/D6etW8uswao/s1600-h/AuditMarkup.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 125px;" src="http://1.bp.blogspot.com/_JreCrYrWtLc/Svrcz3uRbdI/AAAAAAAAAE4/D6etW8uswao/s200/AuditMarkup.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5402873486673800658" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1126849756442500422-3084560839087850682?l=adfbits.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adfbits.blogspot.com/feeds/3084560839087850682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1126849756442500422&amp;postID=3084560839087850682' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/3084560839087850682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/3084560839087850682'/><link rel='alternate' type='text/html' href='http://adfbits.blogspot.com/2009/11/history-columns.html' title='History Columns'/><author><name>Jesse</name><uri>http://www.blogger.com/profile/03073167674153637139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_JreCrYrWtLc/Svrcz3uRbdI/AAAAAAAAAE4/D6etW8uswao/s72-c/AuditMarkup.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1126849756442500422.post-6343562704655785559</id><published>2009-04-21T20:40:00.000-07:00</published><updated>2009-04-22T21:34:22.476-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='how to create custom adf component'/><category scheme='http://www.blogger.com/atom/ns#' term='declarative adf component'/><category scheme='http://www.blogger.com/atom/ns#' term='adf tag lib'/><category scheme='http://www.blogger.com/atom/ns#' term='custom popup'/><category scheme='http://www.blogger.com/atom/ns#' term='af:popup'/><category scheme='http://www.blogger.com/atom/ns#' term='ADF Library JAR file'/><title type='text'>Declarative Component, Custom Popup</title><content type='html'>I have incorporated all of the quirky requirements (for my project at least) for popups into a simple to use adf declarative component. This component is available to my entire project by means of an ADF Library JAR file (see &lt;a href="http://www.oracle.com/technology/products/jdev/tips/fnimphius/declarative_comp_adf/declarative_component_adf.html"&gt;how-to&lt;/a&gt;). It is included as a TagLib, which makes using it as simple as drag'n'drop. I include the lib as a JSP Tag Library whereas Frank does it a little bit different in the how-to.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JreCrYrWtLc/Se6eBa6eeoI/AAAAAAAAAEw/RwKWrFyXXsU/s1600-h/ProJProps.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 144px;" src="http://4.bp.blogspot.com/_JreCrYrWtLc/Se6eBa6eeoI/AAAAAAAAAEw/RwKWrFyXXsU/s200/ProJProps.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5327369156467522178" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can download the whole project, &lt;a href="https://dl.getdropbox.com/u/994633/AdfBitsComponent.zip"&gt;AdfBitsComponent.zip&lt;/a&gt; or, if you want to just &lt;i&gt;use&lt;/i&gt; the component library (as shown in the screen shot above), download just the jar &lt;a href="https://dl.getdropbox.com/u/994633/AdfBitsComponentLib.jar"&gt;AdfBitsComponentLib.jar&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JreCrYrWtLc/Se6cfpTeigI/AAAAAAAAAEo/87TO2SWGjs8/s1600-h/AdfBitsCustomPopup.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 70px;" src="http://1.bp.blogspot.com/_JreCrYrWtLc/Se6cfpTeigI/AAAAAAAAAEo/87TO2SWGjs8/s200/AdfBitsCustomPopup.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5327367476703300098" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;Features:&lt;br /&gt;&lt;li&gt;Can be shown from javascript or java.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Will ensure that no values are left over from the last time it was displayed (has been a major issue with our project).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Has Save and Cancel buttons built in that call declared actions/actionListeners.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Has optional confirmation prompt when using the cancel button (it will check to see if any of the editable values have changed, and if so will prompt the user to confirm, yes/no, that they want to cancel their edits).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Will also capture the x, close-icon, and perform the Cancel button's actionListener, in case anything needs to be cleaned up once the popup is dismissed.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Will click the Save button when the Enter key is pressed.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Will click the Cancel button when the Escape key is pressed.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;If the Confirmation prompt is up, then pressing Enter will cause the current yes/no button to click.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;If the Confirmation prompt is up, then pressing Escape will cause the Confimration prompt to dismiss, but will allow the main popup to remain.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;All labels are customizable, but come with defaults set.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Includes a facet to allow more buttons to be added between the Save and Cancel buttons.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;If these features don't match your requirements (or if they don't work like you think they should), download the project and hack away at it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1126849756442500422-6343562704655785559?l=adfbits.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adfbits.blogspot.com/feeds/6343562704655785559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1126849756442500422&amp;postID=6343562704655785559' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/6343562704655785559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/6343562704655785559'/><link rel='alternate' type='text/html' href='http://adfbits.blogspot.com/2009/04/declarative-component-custom-popup.html' title='Declarative Component, Custom Popup'/><author><name>Jesse</name><uri>http://www.blogger.com/profile/03073167674153637139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_JreCrYrWtLc/Se6eBa6eeoI/AAAAAAAAAEw/RwKWrFyXXsU/s72-c/ProJProps.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1126849756442500422.post-17091286553523718</id><published>2009-01-29T20:06:00.000-08:00</published><updated>2009-02-05T07:11:52.062-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adf pinDataControl pinning datacontrol changeeventpolicy change event policy'/><title type='text'>ERROR:  Use of pinDataControl is not supported. Pinning the DataControl will result in severe performance issues.</title><content type='html'>This was discovered after implementing the code in the previous post on, "Hopping from one Train Stop to the next, causes the old stop to reexecute its bindings", although I do not believe it is directly related:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JreCrYrWtLc/SYJ9p2pGGrI/AAAAAAAAAEg/MwrT0FKqyU4/s1600-h/Picture+12.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 98px;" src="http://2.bp.blogspot.com/_JreCrYrWtLc/SYJ9p2pGGrI/AAAAAAAAAEg/MwrT0FKqyU4/s200/Picture+12.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5296934269737114290" /&gt;&lt;/a&gt;&lt;br /&gt;This was most likely in the console log all along, but only was noticed because of the fact that one of the executables, which was released after visiting a new tab, was being held onto and was trying to get reused. But since it had been released, it could no longer be used, and therefore threw up an exception, thus bringing the &lt;span style="color:red"&gt;!ERROR!&lt;/span&gt; to our attention.&lt;br /&gt;&lt;br /&gt;The FIX:&lt;br /&gt;Reset the ChangeEventPolicy of the offending iterator back to the default, rather than "ppr".&lt;br /&gt;&lt;br /&gt;According to the docs, ChangeEventPolicy can be used to perform automatic refresh of any UI component bound to the iterator when data is changed in the model and the docs actually recommend using it when there are a lot of components on a form that need ppr, however this was not needed in this particular case (and so far, nowhere else in our app).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1126849756442500422-17091286553523718?l=adfbits.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adfbits.blogspot.com/feeds/17091286553523718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1126849756442500422&amp;postID=17091286553523718' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/17091286553523718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/17091286553523718'/><link rel='alternate' type='text/html' href='http://adfbits.blogspot.com/2009/01/error-use-of-pindatacontrol-is-not.html' title='ERROR:  Use of pinDataControl is not supported. Pinning the DataControl will result in severe performance issues.'/><author><name>Jesse</name><uri>http://www.blogger.com/profile/03073167674153637139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_JreCrYrWtLc/SYJ9p2pGGrI/AAAAAAAAAEg/MwrT0FKqyU4/s72-c/Picture+12.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1126849756442500422.post-4243548808538638489</id><published>2009-01-29T18:40:00.000-08:00</published><updated>2009-01-29T20:24:31.917-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Taskflow bindings executables release train stop reexecute'/><title type='text'>Hopping from one Train Stop to the next, causes the old stop to reexecute its bindings</title><content type='html'>We have a page with several tabs within it. If you click tab 2, the bindings for both tab 1 (the starting point) and tab 2 get executed. If you then go to tab 3, the bindings for tabs 1, 2, and 3 get executed. The more tabs you visit the more crunching that goes on behind the scenes. It's obvious that we don't need tabs that we aren't currently viewing, to get executed, just the one that we have most recently clicked.&lt;br /&gt;&lt;br /&gt;To avoid this, we have customized some of the ADF data control classes, namely DCTaskFlowBinding. What we have done, is added code to release the list of executables from a task-flow’s bindings when the task-flow is navigated away from. This avoids having its executables refreshed.&lt;br /&gt;&lt;br /&gt;The underlying ISSUE:&lt;br /&gt;As new train-stops are visited, the bindings for each of the train stops, which are task-flows in our case, are added to the main train stop task-flow's list of executables within it bindings. Each time you visit a new tab, or rather a new train stop, the bindings for the main task-flow get re-executed. This causes all of its executables, which basically are the bindings for each of the visited tabs' task-flows, to get executed as well. Which, as you may have figured, causes the entire tree of bindings to get refreshed. Since this main task-flow is a major part of our application, there are probably hundreds of iterators within this tree, especially after visiting each of the tabs. This was causing a major slow down.&lt;br /&gt;&lt;br /&gt;The FIX:&lt;br /&gt;Our solution to this problem was to simply release the old tab's executable bindings as it was navigated away from. There is a navigation listener on the main task-flow which contains the activityId of the currently selected train stop. Once a new train stop is selected, this listener gets called. The last part of the listener method calls cleanupBeforeRelease in the DCTaskFlowBinding class. What we have done is, customized the DCTaskFlowBinding class to, as a part of this method, release all of this task-flows's executable bindings. Releasing these bindings essentially removes them from the binding container itself, which prevents them from being executed when the top level task-flow navigates to a new tab. This old tab's bindings still get executed, however, it is much quicker since the costly executables have been released.&lt;br /&gt;&lt;br /&gt;The CODE:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;In DataBindings.cpx&lt;br /&gt;&lt;div class="adfCode"&gt;Replaced:&lt;br /&gt;&lt;div class="adfcode"&gt;&amp;lt;factory nameSpace="http://xmlns.oracle.com/adf/controller/binding"&lt;br /&gt;className="com.collectamerica.aquila.common.TaskFlowBindingDefFactoryImpl"/&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;with&lt;br /&gt;&lt;br /&gt;&lt;div class="adfcode"&gt;&amp;lt;factory nameSpace="http://xmlns.oracle.com/adf/controller/binding"&lt;br /&gt;className="com.collectamerica.aquila.common.&lt;span class="adfhl"&gt;Custom&lt;/span&gt;TaskFlowBindingDefFactoryImpl"/&amp;gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Create CustomTaskFlowBindingDefFactoryImpl.java and extend TaskFlowBindingDefFactoryImpl&lt;br /&gt;&lt;br /&gt;Within that class we basically replaced:&lt;br /&gt;&lt;div class="adfcode"&gt;DCTaskFlowBindingDef taskflowBindingDef = new DCTaskFlowBindingDef();&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;with&lt;br /&gt;&lt;br /&gt;&lt;div class="adfcode"&gt;DCTaskFlowBindingDef taskflowBindingDef = new &lt;span class="adfhl"&gt;Custom&lt;/span&gt;DCTaskFlowBindingDef();&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;to end up with:&lt;br /&gt;&lt;br /&gt;&lt;div class="adfcode"&gt;public class CustomTaskFlowBindingDefFactoryImpl extends TaskFlowBindingDefFactoryImpl {&lt;br /&gt;    public CustomTaskFlowBindingDefFactoryImpl() {&lt;br /&gt;        super();&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    /**&lt;br /&gt;     * {@inheritDoc}&lt;br /&gt;     * @param element {@inheritDoc}&lt;br /&gt;     * @return {@inheritDoc}&lt;br /&gt;     */&lt;br /&gt;    public DCDefBase createDefinition(DefElement element)&lt;br /&gt;    {&lt;br /&gt;       // In our case there is only one object we can create but we still do&lt;br /&gt;       // the check.&lt;br /&gt;       if (element.getNodeName().equals(Constants.ENAME_TASKFLOWBINDING))&lt;br /&gt;       {&lt;br /&gt;          DCTaskFlowBindingDef taskflowBindingDef = new CustomDCTaskFlowBindingDef();&lt;br /&gt;          return taskflowBindingDef;&lt;br /&gt;       }&lt;br /&gt;       return null;&lt;br /&gt;    }&lt;br /&gt;}&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Create a class named CustomDCTaskFlowBindingDef which extends DCTaskFlowBindingDef, and basically this changes the binding container class name to point to our own custom class that we'll create next:&lt;br /&gt;&lt;br /&gt;&lt;div class="adfcode"&gt;public class CustomDCTaskFlowBindingDef extends DCTaskFlowBindingDef {&lt;br /&gt;    public CustomDCTaskFlowBindingDef() {&lt;br /&gt;        super();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public void init(HashMap initValues) {&lt;br /&gt;        super.init(initValues);&lt;br /&gt;       &lt;br /&gt;        // Overide BindingContainer class name with our special TaskFlowBinding.&lt;br /&gt;        mBindingContainerClassName = &lt;span class="adfhl"&gt;Custom&lt;/span&gt;DCTaskFlowBinding.class.getName();&lt;br /&gt;    }&lt;br /&gt;}&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Create a class named CustomDCTaskFlowBinding which extends DCTaskFlowBinding and override the cleanupBeforeRelease method and implement it as follows:&lt;br /&gt;&lt;br /&gt;&lt;div class="adfcode"&gt;public class CustomDCTaskFlowBinding extends DCTaskFlowBinding {&lt;br /&gt;    public CustomDCTaskFlowBinding() {&lt;br /&gt;        super();&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    /*&lt;br /&gt;     * This method has been customized in order to release bindings which are no&lt;br /&gt;     * no longer needed. You'll find that in the super's method,&lt;br /&gt;     * cleanupBeforeRelease, that there is a TODO which states that exactly what&lt;br /&gt;     * we're adding should be done. This will prevent these old bindings from being&lt;br /&gt;     * reexecuted everytime we switch between task-flows, and in the specific case&lt;br /&gt;     * this was originally done for, will prevent all previous tabs from reexectuing&lt;br /&gt;     * their executable bindings when switching tabs.&lt;br /&gt;     */&lt;br /&gt;    @Override&lt;br /&gt;    protected void cleanupBeforeRelease(String childViewPortId) {&lt;br /&gt;        super.cleanupBeforeRelease(childViewPortId);&lt;br /&gt;       &lt;br /&gt;        //if this task-flow is being notified, it is because this task-flow is being&lt;br /&gt;        // navigated away from, so release its executable bindings (the expensive ones)&lt;br /&gt;        // which will get relisted when the page is actually displayed again&lt;br /&gt;        List executables = this.getExecutableBindings();&lt;br /&gt;&lt;br /&gt;        if(executables != null){&lt;br /&gt;            for(int i=0; i&amp;lt;executables.size(); i++){&lt;br /&gt;                Object oExec = executables.get(i);&lt;br /&gt;               &lt;br /&gt;                if(oExec instanceof JUFormBinding){&lt;br /&gt;                    JUFormBinding jExec = (JUFormBinding)oExec;&lt;br /&gt;                    jExec.release(DCDataControl.REL_ALL_REFS);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1126849756442500422-4243548808538638489?l=adfbits.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adfbits.blogspot.com/feeds/4243548808538638489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1126849756442500422&amp;postID=4243548808538638489' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/4243548808538638489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/4243548808538638489'/><link rel='alternate' type='text/html' href='http://adfbits.blogspot.com/2009/01/hopping-from-one-train-stop-to-next.html' title='Hopping from one Train Stop to the next, causes the old stop to reexecute its bindings'/><author><name>Jesse</name><uri>http://www.blogger.com/profile/03073167674153637139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1126849756442500422.post-355479620816110408</id><published>2009-01-12T17:54:00.000-08:00</published><updated>2009-01-13T17:36:23.118-08:00</updated><title type='text'>An empty SelectOneChoice is not triggering the required validation error</title><content type='html'>We had a problem with a SelectOneChoice that had the required attribute set to true, but it never threw an error once the form was submitted. It turns out that LOV settings on the View Object were causing the problem. There is a checkbox to include a "No Selection" item.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JreCrYrWtLc/SW1ALOaZTJI/AAAAAAAAAEY/VGOg5_DSkXM/s1600-h/socLOV_3_go.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 197px;" src="http://1.bp.blogspot.com/_JreCrYrWtLc/SW1ALOaZTJI/AAAAAAAAAEY/VGOg5_DSkXM/s400/socLOV_3_go.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5290955698821745810" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Checking this box causes an empty space to be represented in the dropdown list. This means that a empty string is a selectable value. Since this is not the same as null, if it is the selected value, it considers this as fulfilling the requirement for a value to be selected. If you leave this checkbox unchecked, and do not set the value of the selectOneChoice when it is initially rendered, then you can have the selectOneChoice show up initially with no value showing/selected, and then if the user submits, they will get an error stating the a value must be selected. Also, you get the benefit of not being able to select a blank value, because as soon as the user selects a value, the blank is gone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1126849756442500422-355479620816110408?l=adfbits.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adfbits.blogspot.com/feeds/355479620816110408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1126849756442500422&amp;postID=355479620816110408' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/355479620816110408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/355479620816110408'/><link rel='alternate' type='text/html' href='http://adfbits.blogspot.com/2009/01/empty-selectonechoice-is-not-triggering.html' title='An empty SelectOneChoice is not triggering the required validation error'/><author><name>Jesse</name><uri>http://www.blogger.com/profile/03073167674153637139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_JreCrYrWtLc/SW1ALOaZTJI/AAAAAAAAAEY/VGOg5_DSkXM/s72-c/socLOV_3_go.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1126849756442500422.post-4178304764491584104</id><published>2008-12-25T15:46:00.000-08:00</published><updated>2008-12-25T18:00:23.904-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='panelCollection toolbar buttons disabled'/><title type='text'>Disabling buttons based on table selection</title><content type='html'>The easiest way to do this is to simply put an EL expression in the disabled attribute of the button that checks the size of the table's selectedRowKeys. You would also need to set a partialTrigger on the button with the ID of the table. The only problem with this is that it requires a trip to the server to evaluate the expression. Our application is going to be used by customers that are going to have low bandwidth and therefore need as few trips to the server as possible. So, we had to come up with a way to disable our toolbar buttons on the client (i.e. through javascript). We knew that a panelCollection did this very thing, so we just needed to tap into the panelCollection's functionality in order to duplicate this behavior.&lt;br /&gt;&lt;br /&gt;We also had a need to arrange the buttons on the toolbar differently than what the panelCollection allows for. So, using a template (to replace all of our current implementations of panelCollections) we overhauled the panelCollection to suit our needs.&lt;br /&gt;&lt;br /&gt;We tapped into the AdfDhtmlPanelCollectionPeer and found two important methods, updateStandardMenuToolbarItems and updateRowSelectionContext. The first is called when  a column is selected, and the second is called when a row is selected.&lt;br /&gt;&lt;br /&gt;Our template basically hid the original toolbar and added one on top that we could customize as much as we wanted, one that gets updated by chaining our own custom methods onto the two mentioned above. I am sure there is a proper design pattern named for what we're doing; it's something that is done with the onload function in many apps. Anyway, here is the code that we used to get our client code called every time a row or column is selected on a table that is within our template (which of course includes a panelCollection):&lt;br /&gt;&lt;br /&gt;&lt;div class="adfcode"&gt;/* Allows the 'extra' toolbar to function as if it is part of the &lt;br /&gt; * panelcollection. */&lt;br /&gt;function initGridScript() {&lt;br /&gt;    if (typeof AdfDhtmlPanelCollectionPeer.prototype.updateStandardMenuToolbarItemsORIG != 'function') {&lt;br /&gt;        AdfDhtmlPanelCollectionPeer.prototype.updateStandardMenuToolbarItemsORIG = AdfDhtmlPanelCollectionPeer.prototype.updateStandardMenuToolbarItems;&lt;br /&gt;&lt;br /&gt;        AdfDhtmlPanelCollectionPeer.prototype.updateStandardMenuToolbarItemsCustom = updateMenuButtons;&lt;br /&gt;&lt;br /&gt;        //Update the 'extra' toolbar's buttons when the normal toolbar is updated&lt;br /&gt;        AdfDhtmlPanelCollectionPeer.prototype.updateStandardMenuToolbarItems = function () {&lt;br /&gt;            this.updateStandardMenuToolbarItemsORIG();&lt;br /&gt;&lt;br /&gt;            if(typeof this.getDomElement().className != 'undefined'){&lt;br /&gt;                if (this.getDomElement().className.search('CustomGridWithToolbar') &gt; -1) {&lt;br /&gt;                    this.updateStandardMenuToolbarItemsCustom();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        AdfDhtmlPanelCollectionPeer.prototype.updateRowSelectionContextORIG = AdfDhtmlPanelCollectionPeer.prototype.updateRowSelectionContext;&lt;br /&gt;&lt;br /&gt;        AdfDhtmlPanelCollectionPeer.prototype.updateRowSelectionContextCustom = updateTableButtons;&lt;br /&gt;&lt;br /&gt;        AdfDhtmlPanelCollectionPeer.prototype.updateRowSelectionContext = function () {&lt;br /&gt;            this.updateRowSelectionContextORIG();&lt;br /&gt;&lt;br /&gt;            if(typeof this.getDomElement().className != 'undefined'){&lt;br /&gt;                if (this.getDomElement().className.search('CustomGridWithToolbar') &gt; -1) {&lt;br /&gt;                    this.updateRowSelectionContextCustom();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The &lt;span class="adfhl"&gt;AdfDhtmlPanelCollectionPeer.prototype.updateStandardMenuToolbarItemsORIG = AdfDhtmlPanelCollectionPeer.prototype.updateStandardMenuToolbarItems;&lt;/span&gt; saves off the original functionality so that we can invoke it later.&lt;br /&gt;&lt;br /&gt;The &lt;span class="adfhl"&gt;typeof AdfDhtmlPanelCollectionPeer.prototype.updateStandardMenuToolbarItemsORIG != 'function'&lt;/span&gt; ensures that we are not appending our own functions more than once.&lt;br /&gt;&lt;br /&gt;The &lt;span class="adfhl"&gt;this.updateStandardMenuToolbarItemsORIG();&lt;/span&gt; ensures the original functionality is invoked.&lt;br /&gt;&lt;br /&gt;The check for &lt;span class="asfhl"&gt;'CustomGridWithToolbar'&lt;/span&gt; ensures that we are only calling our custom code when the panelCollection is the one from our template.&lt;br /&gt;&lt;br /&gt;This function, initGridScript(), is called at the bottom of the javascript file on which it is declared, and the javascript file itself included as part of the template. So, it gets called whenever the template is written out to the response.&lt;br /&gt;&lt;br /&gt;The &lt;span class="adfhl"&gt;updateStandardMenuToolbarItemsCustom&lt;/span&gt; method disables/enables menu items based column selection. In &lt;span class="adfhl"&gt;updateRowSelectionContextCustom&lt;/span&gt;, the code checks the RichTable client component's getSelectedRowKeys() to disable and enable the buttons in the toolbar accordingly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1126849756442500422-4178304764491584104?l=adfbits.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adfbits.blogspot.com/feeds/4178304764491584104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1126849756442500422&amp;postID=4178304764491584104' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/4178304764491584104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/4178304764491584104'/><link rel='alternate' type='text/html' href='http://adfbits.blogspot.com/2008/12/disabling-buttons-based-on-table.html' title='Disabling buttons based on table selection'/><author><name>Jesse</name><uri>http://www.blogger.com/profile/03073167674153637139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1126849756442500422.post-4683028855394857760</id><published>2008-12-11T14:48:00.000-08:00</published><updated>2008-12-11T15:14:06.335-08:00</updated><title type='text'>How do I tell if they clicked a row in the table versus its body?</title><content type='html'>In our app, we have a dblClick clientListener as a direct child of a table. If the user clicks a row, we want to show them the edit popup for that row, if they click in white space (i.e. the are beneath the rows), we want to create a new row and show the popup to edit that new row. The source for either click will be the table itself, however, the target will be what we are interested in. To ensure that our code remains cross-browser compatible, we'll use methods made available by client-side ADF.&lt;br /&gt;&lt;br /&gt;From the ADF js file, I have plucked the following:&lt;br /&gt;&lt;br /&gt;&lt;div class="adfcode"&gt;var agent = AdfAgent.AGENT, domEvent = evt.getNativeEvent();&lt;br /&gt;var target = agent.getEventTarget(domEvent);&lt;br /&gt;var tablePeer = table.getPeer();&lt;br /&gt;var &lt;span class="adfhl"&gt;attrs&lt;/span&gt; = tablePeer.GetRowKeyAndRow(target,tablePeer.getDomElement());&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;If &lt;span class="adfhl"&gt;attrs&lt;/span&gt; is null, then the user clicked within the table body and not on a row. If &lt;span class="adfhl"&gt;attrs&lt;/span&gt; is not null then the user clicked on an actual row.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1126849756442500422-4683028855394857760?l=adfbits.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adfbits.blogspot.com/feeds/4683028855394857760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1126849756442500422&amp;postID=4683028855394857760' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/4683028855394857760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/4683028855394857760'/><link rel='alternate' type='text/html' href='http://adfbits.blogspot.com/2008/12/how-do-i-tell-if-they-clicked-row-in.html' title='How do I tell if they clicked a row in the table versus its body?'/><author><name>Jesse</name><uri>http://www.blogger.com/profile/03073167674153637139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1126849756442500422.post-6950722102235434401</id><published>2008-12-01T17:03:00.000-08:00</published><updated>2008-12-01T17:20:42.337-08:00</updated><title type='text'>Where'd my frickin' log window go?</title><content type='html'>I lost my log window in JDev, and no matter how many times I hit 'View &gt; Log', it never appears; found the answer to resurrecting it on &lt;a href="http://groundside.com/blog/DuncanMills.php?s=lost+window"&gt;Duncan Mills' site&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Shutdown JDev&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Delete &lt;i&gt;windowinglayout.xml&lt;/i&gt;. This file is in the &lt;i&gt;o.ide&lt;/i&gt; folder under the jdeveloper system folder, &lt;i&gt;system11.1.1.0.31.51.56&lt;/i&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Restart JDev&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;This file will get rebuilt with the layout defaults, which includes the log window, or any other window you may have misplaced, when JDeveloper restarts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1126849756442500422-6950722102235434401?l=adfbits.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adfbits.blogspot.com/feeds/6950722102235434401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1126849756442500422&amp;postID=6950722102235434401' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/6950722102235434401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/6950722102235434401'/><link rel='alternate' type='text/html' href='http://adfbits.blogspot.com/2008/12/whered-my-frickin-log-window-go.html' title='Where&apos;d my frickin&apos; log window go?'/><author><name>Jesse</name><uri>http://www.blogger.com/profile/03073167674153637139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1126849756442500422.post-8216122581645930680</id><published>2008-11-24T17:14:00.000-08:00</published><updated>2009-02-18T07:35:43.815-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adf partialTrigger syntax findComponent'/><title type='text'>Determining and Verifying Relative Partial Trigger Ids</title><content type='html'>Getting a component to refresh based upon the actions or events generated by other components requires that the partial target (the component you want to be refreshed) declare the id (via a relative or absolute path) of the trigger component of which to &lt;span class="Apple-style-span" style="font-style: italic;"&gt;listen&lt;/span&gt; for a partial submit. Sometimes, determining this path can be a guesstimate at best, especially if your page contains included fragments, regions, or templates. Generally, if your target and trigger are within the same jsp fragment or jsp page, you can use the 'Edit Property' dialog on the partialTrigger attribute. For those tricky cases, read on ...&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The method which I've discovered works best for me is to use Firebug and ADF's client side 'findComponent' function.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-weight:bold;"&gt;Step 1&lt;/span&gt;: Be sure to have Firebug installed. I currently am using Firefox 2.0.0.16 with Firebug 1.0.5, though this should work with any version of Firefox\Firebug.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-weight:bold;"&gt;Step 2:&lt;/span&gt; Determine the client id, including the full naming container path, of your target. This can be done by opening the HTML tab of the Firebug console and doing a search for the component's declared id. If you have a component which is several naming containers deep, this can be a lot easier than tracing the path through the jsp pages. We'll call this the target id from here on.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="adfcode"&gt;page:tmplt:rgn:panCol:tableA&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-weight:bold;"&gt;Step 3:&lt;/span&gt; Determine the id, including the full naming container path, of your trigger. Use the same method as in Step 2.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="adfcode"&gt;page:tmplt:buttonA&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-weight:bold;"&gt;Step 4:&lt;/span&gt; Paste these two ids into a text file and determine their last point of commonality. In the example below, the target and trigger share 'page:tmplt' as their base path. This means that this part of the path can be ignored, because these components will be relative to each other at this point.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="adfcode"&gt;&lt;div&gt;&lt;span style="color:red;"&gt;page:tmplt:&lt;/span&gt;rgnA:panCol:tableA [target]&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="color:red;"&gt;page:tmplt:&lt;/span&gt;rgnB:buttonA [trigger]&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-weight:bold;"&gt;Step 5:&lt;/span&gt; Determine what the relative path of the trigger from the target should be. This can be tricky, but at this point all you really need is a good guess that we can test in the next step. For this example we can see that the trigger is up two naming containers and then down one.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, for the first naming container we climb up from the target, we begin our relative path with two colons (if we were to put only one, we would be signaling that our path is absolute, and should start from the page root. No colons would be signaling to search for other components that are under the same naming container path as the target).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="adfcode"&gt;::&lt;/div&gt; gets us to -&gt; page:tmplt:rgnA&lt;div&gt;(Keep in mind that findComponent really starts from the current component's parent naming container if it's not a naming container itself OR itself, if it &lt;i&gt;is&lt;/i&gt; a naming container. In this case the target is not a naming container, so the search begins from 'panCol', the target's parent naming container.)&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To get above the next naming container, we add another :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="adfcode"&gt;:::&lt;/div&gt; gets us to -&gt; page:tmplt&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now we are at our point of commonality, and we need to begin to traverse down the naming container path into a different branch. Appending the down stream naming container path gets us to the level of our trigger.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="adfcode"&gt;:::rgnB&lt;/div&gt; gets us to -&gt; page:tmplt:rgnB&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now we just need to append the id of the trigger component. My use of id here refers to the id attribute that is declared on the component in the jsp. The client id of the component includes the full naming container path, as we saw when searching for the component in Step 1.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="adfcode"&gt;:::rgnB:buttonA&lt;/div&gt; gets us to -&gt; page:tmplt:rgnB:buttonA&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-weight:bold;"&gt;Step 6:&lt;/span&gt; Now we use the ADF javascript method, findComponent, to get a handle to the target component and verify that we have calculated the the relative client id accurately. Open up the console tab and pass in the target id as the only parameter to the findComponent function.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="adfcode"&gt;AdfPage.PAGE.findComponent('page:tmplt:rgnA:panCol:tableA');&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This should return an object; in my local example this returns an AdfRichTable object. Now, from this object we will use the same function and pass in the relative path we determined in Step 4.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="adfcode"&gt;AdfPage.PAGE.findComponent('page:tmplt:rgnA:panCol:tableA).findComponent(':::rgnB:buttonA');&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If this function returns our trigger, then we know we have the correct relative path, :::rgnB:buttonA, to assign as the value for the partialTrigger attribute on our target. If not, we can test other paths rather quickly by plugging in different trigger ids. Most of my errors are either too few or too many leading colons, and I can easily test those by using this function.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1126849756442500422-8216122581645930680?l=adfbits.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adfbits.blogspot.com/feeds/8216122581645930680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1126849756442500422&amp;postID=8216122581645930680' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/8216122581645930680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/8216122581645930680'/><link rel='alternate' type='text/html' href='http://adfbits.blogspot.com/2008/11/determining-and-verifying-relative.html' title='Determining and Verifying Relative Partial Trigger Ids'/><author><name>Jesse</name><uri>http://www.blogger.com/profile/03073167674153637139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1126849756442500422.post-4919024715280472902</id><published>2008-11-16T18:06:00.001-08:00</published><updated>2009-12-14T07:15:33.539-08:00</updated><title type='text'>Sticky Popup Values</title><content type='html'>Most of the problems that I will post about come from the project on which I am currently working. This post will be about one that has plagued us since the early days of our project, one which we thought we had fixed on more than one occasion; popups holding on to stale data.&lt;br /&gt;&lt;br /&gt;Let&amp;apos;s say a user clicks a button to edit values in a given table, in our app we use a popup to display a form in which the user can update the data. The user can make changes and click &amp;apos;Ok&amp;apos; to save or click &amp;apos;Cancel&amp;apos; to dismiss the changes; both actions dismiss the popup. Our problem was that if the user used &amp;apos;Cancel&amp;apos;, which has its immediate attribute set to &amp;apos;true&amp;apos; (so that the validation does not occur), the next time they request for the popup to be displayed, it will display the values that were in the popup which we dismissed. This means that if we were editing row A in the table the first time, then cancelled, then decided to edit row B, the values from row A would appear. And every subsequent showing and canceling of the dialog would display the values from row A. &lt;br/&gt;&lt;br /&gt;The issue turns out to be that since we skip the validation phase of ADF lifecycle, the values never get &lt;span style="font-style: italic; "&gt;submitted&lt;/span&gt; out of the JSF model into the ADF model. The values therefore remain as values waiting to be submitted and are subsequently never excused from the fields in the popup. These values then replace whatever data is being displayed from the current row. So, if we were to click &amp;apos;Ok&amp;apos; in the popup, they would then replace the values of the current row, and the next time the popup would be shown, it would actually be displaying the values from the current row as we expect (now that there are no stale values, because they have finally been submitted). &lt;br/&gt;&lt;br /&gt;The trick we used to work around this issue is to basically clear out these &lt;span style="font-style: italic; "&gt;un-submitted&lt;/span&gt; values from fields in the popup. We do this by iterating over all of the editable components that are in the dialog within the popup and using resetValue(). We generally pass in the dialog as the rootComponent.&lt;br/&gt;&lt;br /&gt;&lt;div class="adfcode"&gt;public void resetStaleValues(UIComponent rootComponent){&lt;br /&gt; Iterator iter = rootComponent.getFacetsAndChildren();&lt;br /&gt; while (iter.hasNext()) {&lt;br /&gt;    UIComponent component = iter.next();&lt;br /&gt;    if (component instanceof UIXEditableValue) {&lt;br /&gt;       UIXEditableValue uiField = (UIXEditableValue)component;&lt;br /&gt;       uiField.resetValue();&lt;br /&gt;    }&lt;br /&gt;    resetStaleValues(component);&lt;br /&gt;  }&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1126849756442500422-4919024715280472902?l=adfbits.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adfbits.blogspot.com/feeds/4919024715280472902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1126849756442500422&amp;postID=4919024715280472902' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/4919024715280472902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/4919024715280472902'/><link rel='alternate' type='text/html' href='http://adfbits.blogspot.com/2008/11/sticky-popup-values.html' title='Sticky Popup Values'/><author><name>Jesse</name><uri>http://www.blogger.com/profile/03073167674153637139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1126849756442500422.post-6021102635316476334</id><published>2008-11-04T05:27:00.000-08:00</published><updated>2008-12-11T16:11:17.193-08:00</updated><title type='text'>En cuál manera debemos codificar?</title><content type='html'>&lt;span class="Apple-style-span"  style=" ;font-family:Times;"&gt;&lt;div style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 3px; padding-right: 3px; padding-bottom: 3px; padding-left: 3px; width: auto; font: normal normal normal 100%/normal Georgia, serif; text-align: left; "&gt;Code is my life. Ok, not really, it just provides an engaging, meaningful career, and keeps my mind churning during the day, and occasionally while I sleep. Does anyone else dream in code? When I do, I seem to run through the same lines of code over and over.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Oh well, that is not what this blog is about. I would like to share pieces to some of the many coding puzzles on which I work. Currently, I am learning how to use the latest release of Oracle's JDeveloper, 11G, and like many new (to me) technologies, there is a steep learning curve. I am hoping to provide some of the tidbits that I pick up along the way with others who are new to ADF, and hopefully provide some solutions that may prove useful.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We'll see how well I keep this up. Oh, and as for the title ... I, of course, wanted something witty, but just went with a phrase similar to that of the one on my t-shirt instead: "En cuál manera debemos vivir?," which translates to "How ought we to live?." So, how ought we to code? Well, it's a difficult balance between quality and quantity. We don't always have enough time to pump out the best code, but as we all know, poor coding can cost time later. Anyways, I will claim that my posts will not necessarily be THE answer to the problems at hand, but they just might save you some time. And I would encourage anyone perusing my so called solutions to share any alternate/better solutions, so that we can all become better coders, and not just code monkeys.&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1126849756442500422-6021102635316476334?l=adfbits.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adfbits.blogspot.com/feeds/6021102635316476334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1126849756442500422&amp;postID=6021102635316476334' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/6021102635316476334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1126849756442500422/posts/default/6021102635316476334'/><link rel='alternate' type='text/html' href='http://adfbits.blogspot.com/2008/11/adf-bits.html' title='En cuál manera debemos codificar?'/><author><name>Jesse</name><uri>http://www.blogger.com/profile/03073167674153637139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
