Skip to main content

ADF Defaulting a backing bean driven select: Thing I learned being stupid 1

Jdeveloper 11.1.1.5

Ok,

I had a selectonechoice that was driven by a pojo data control and I just couldn't get its value defaulted.
The following is what I learned along the way and my unique solution:

Drag and drop the item onto the page as a single choice selectonechoice:
Add a variable to your page binding (open your page and click on the bindings tab - right click on variables under Executables - insert inside variables - select variable - Name:selectedItemValue Type: java.lang.Object

Then click on Page definition file and update the variable you just added and add these attributes DefaultValue="#{pageFlowScope.TestBean.id}" IsUpdateable="2".
NOTE: the bold bit pageFlowScope.TestBean.id must be the value you want to default to.

Or you can just paste the xml like such:



<variable Type="java.lang.Integer" Name="selectedItemValue" DefaultValue="#{pageFlowScope.TestBean.id}" IsUpdateable="2" />


Then update your list binding to something like this (you can get this done using the green plus button but I am too lazy to post how if you need to know ask):


    <list StaticList="false" IterBinding="variables"
          ListIter="listItemsIterator" NullValueFlag="start" id="selectedItemValueList">
      <AttrNames>
        <Item Value="selectedItemValue"/>
      </AttrNames>
      <ListAttrNames>
        <Item Value="id"/>
      </ListAttrNames>
      <ListDisplayAttrNames>
        <<tem Value="name"/>
      </ListDisplayAttrNames>
    </list>

NullValueFlag="start" - gives you an empty item

This be my select one choice.
          <af:selectOneChoice value="#{bindings.selectedItemValueList.inputValue}"
                              label="#{bindings.selectedItemValueList.label}"
                              id="soc1"
                              valuePassThru="true" autoSubmit="true"
                              clientComponent="true">
            <f:selectItems value="#{bindings.selectedItemValueList.items}" id="siI"/>
          </af:selectOneChoice>



Handy helpful EL:

1) #{bindings.selectedItemValueList.attribute} - this will give you the actual id of the select box selected item
2) #{bindings.selectedItemValueList.inputValue} = this will give you the index 0 based of the selected item
3) #{bindings.selectedItemValueList.selectedValue == null ? null : bindings.selectedItemValueList.selectedValue.dataProvider} - this gives you the actual underlying object used so you can get the label from here.

Save Button
The save button I use because I need the object not just the object id



            <af:setPropertyListener from="#{bindings.selectedItemValueList.selectedValue == null ? null : bindings. selectedItemValueList .selectedValue.dataProvider}"
                                    to="#{pageFlowScope.listBean.currentValue.selectedItem}"
                                    type="action"/>
          </af:commandButton>




Random code

        Object expr = JsfUtil.resolveELExpression("#{bindings.selectedItemValueList}");
        if (expr instanceof FacesCtrlListBinding) {
            FacesCtrlListBinding list = (FacesCtrlListBinding)expr;
            UIComponent component = valueChangeEvent.getComponent();
            component.processUpdates(FacesContext.getCurrentInstance()); //do model updates for this comp
            DCDataRow row = (DCDataRow)list.getSelectedValue();
            ListItem i = (ListItem)().getDataProvider(); // get actual object via code
        }


Note
Create a list and change the binding xml for your list (ListOperMode attribute) from navigation to  setAttribute and see hoe things change

Comments

Popular posts from this blog

MANIFEST.MF merge JDeveloper for an executable jar

Goto your project > properties. Then click on deployment in the menu. Edit or add a jar deployment profile. Fill in the details under jar options (select Include manifest and give it a main class name) Also remember that the merge functionality only works with a BLANK line at the end of the merge file. REALLY this caught me. My merge file contents: Class-Path: commons-codec-1.3.jar [...empty line here CRLF...]

OJDeploy: Documentation for the tool

Real DOCS:  http://docs.oracle.com/cd/E26098_01/user.1112/e17455/deploying_apps.htm#OJDUG645 OJDeploy Documentation if you run it from the command line - I keep looking for this so I though I would post it here so I remeber. Oracle JDeveloper Deploy 11.1.2.1.0.6081 Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. Usage:   ojdeploy -profile <name> -workspace <jws> [ -project <name> ] [ <options> ]   ojdeploy -buildfile <ojbuild.xml> [ <options> ]   ojdeploy -buildfileschema Arguments:   -profile               the name of the Profile to deploy   -workspace      full path to the JDeveloper Workspace file(.jws)   -project              name of the JDeveloper Project within the .jws where the Profile can be...

JBO-25013: TooManyObjectsException

oracle.jbo.TooManyObjectsException: JBO-25013: Too many objects match the primary key oracle.jbo.Key[Key null ]. Ok so for you it may be trying to insert a duplicate record this should explain your problem (also check trigger they could be the cause.) NOTE: You can also try to create a new duplicate EO if you have a page with two VO's using the same EO. This could sort your problems. For me I needed to add a launch listener on my LOV and clear the cache of my vo. LOV <af:inputListOfValues id="NameId" popupTitle="#{bindings.Name.hints.label}" value="#{bindings.RolName1.inputValue}" label="#{bindings.RolName1.hints.label}" model="#{bindings.RolName1.listOfValuesModel}" required="#{bindings.RolName1.hints.mandatory}" columns="#{bindings.RolName1.hints.displayWidth}" shortDesc="#{bindings.RolName1.hints.tooltip}" launchPopupListener="#{backingBeanScope.backingBean.launchPop...