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:
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):
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
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
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
Post a Comment