On of the major component in tha ADF RC component is a af:selectOneChoice. You can fill this component from backingbean by tow ways:
A) Fill SelectOneChoice Component Programmatically:
1-In the backingbean you can define a variable that hold the selected Value (the value which you are select from selectOneChoice component ) [e.g public String selectedValue;] and make its setter and getter.
2- In the backingbean you can define an array of selectItem that will fill the selectOneChoice(e.g. public SelectItem[] elements = null; ) and make its getter and setter.
3- In the getter of selectItem write this code :
where : UCustomerView1Iterator is the Iterator which its data will fill the selectOneChoice (You must add this iterator in the pageDef).
You backingbean it should be like this :
-----------------------------------------------
4- In you page Drage a selectOneChoice component and set its value to :
#{yourBean.selectedValue}.
5- Insert f:selectItems inside af:selectOneChoice and set its value to:
#{yourBean.elements}.
--------------------------------------------------------------------------------
B) The second way to fill the selectOneChioce is to use af:forEach component and I prefer this way:
1- In the pageDef make a table in the binding section that will fill your selectOneChoice(assume that you make a DeptView1 table in the binding.
2- DeptView1 Table is point to the DeptView1Iterator make its length to -1.
3- Drag and drop a selectOneChoice component and set its value to the attribute in the backingbean.
4- Insert inside selectOneChoice af:forEach component and set Items property to : #{bindings.DeptView1.rangeSet} and set Var property to row.
5- Insert Inside af:forEach af:selectItem set Value Property to #{row.Deptno} this represent the return value of the selectOneChoice if you want the return value be a name of the department set Value Property to #{row.Dname}. Set the Label Property to #{row.Dname}.(Where Deptno and Dname is the attribute of the iterator you use to fill selectOneChoice).
you can download an example from here.
A) Fill SelectOneChoice Component Programmatically:
1-In the backingbean you can define a variable that hold the selected Value (the value which you are select from selectOneChoice component ) [e.g public String selectedValue;] and make its setter and getter.
2- In the backingbean you can define an array of selectItem that will fill the selectOneChoice(e.g. public SelectItem[] elements = null; ) and make its getter and setter.
3- In the getter of selectItem write this code :
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
BindingContainer bindings = getBindings(); | |
DCIteratorBinding dciter =(DCIteratorBinding) bindings.get("UCustomerView1Iterator"); | |
int length = dciter.getViewObject().getRowCount(); | |
elements = new SelectItem[length]; | |
SelectItem item = null; | |
for (int i = 0; i < length; i++) | |
{ | |
Row rw = dciter.getRowAtRangeIndex(i); | |
if (rw != null) | |
{ | |
item = new SelectItem(); | |
item.setValue(rw.getAttribute("Id").toString()); | |
item.setLabel(rw.getAttribute("Name").toString()); | |
} | |
elements[i] = item; | |
} | |
return elements; |
where : UCustomerView1Iterator is the Iterator which its data will fill the selectOneChoice (You must add this iterator in the pageDef).
You backingbean it should be like this :
-----------------------------------------------
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public SelectItem[] elements = null; | |
public String selectedValue; | |
private BindingContainer bindings; | |
public BindingContainer getBindings() | |
{ | |
if (this.bindings == null) | |
{ | |
FacesContext fc = FacesContext.getCurrentInstance(); | |
this.bindings = | |
(BindingContainer) fc.getApplication().evaluateExpressionGet(fc, "#{bindings}", BindingContainer.class); | |
} | |
return this.bindings; | |
} | |
public SelectItem[] getElements() | |
{ | |
BindingContainer bindings = getBindings(); | |
DCIteratorBinding dciter = (DCIteratorBinding) bindings.get("UCustomerView1Iterator"); | |
int length = dciter.getRangeSize() & gt; | |
0? dciter.getRangeSize(): new Long(dciter.getEstimatedRowCount()).intValue(); | |
elements = new SelectItem[length]; | |
SelectItem item = null; | |
for (int i = 0; i & lt; length) | |
; | |
i++; | |
{ | |
Row rw = dciter.getRowAtRangeIndex(i); | |
if (rw != null) | |
{ | |
item = new SelectItem(); | |
item.setValue(rw.getAttribute("Id").toString()); | |
item.setLabel(rw.getAttribute("Name").toString()); | |
} | |
elements[i] = item; | |
} | |
return elements; | |
} | |
public void setElements(SelectItem[] elements) | |
{ | |
this.elements = elements; | |
} | |
public void setSelectedValue(String selectedValue) | |
{ | |
this.selectedValue = selectedValue; | |
} | |
public String getSelectedValue() | |
{ | |
return selectedValue; | |
} |
4- In you page Drage a selectOneChoice component and set its value to :
#{yourBean.selectedValue}.
5- Insert f:selectItems inside af:selectOneChoice and set its value to:
#{yourBean.elements}.
--------------------------------------------------------------------------------
B) The second way to fill the selectOneChioce is to use af:forEach component and I prefer this way:
1- In the pageDef make a table in the binding section that will fill your selectOneChoice(assume that you make a DeptView1 table in the binding.
2- DeptView1 Table is point to the DeptView1Iterator make its length to -1.
3- Drag and drop a selectOneChoice component and set its value to the attribute in the backingbean.
4- Insert inside selectOneChoice af:forEach component and set Items property to : #{bindings.DeptView1.rangeSet} and set Var property to row.
5- Insert Inside af:forEach af:selectItem set Value Property to #{row.Deptno} this represent the return value of the selectOneChoice if you want the return value be a name of the department set Value Property to #{row.Dname}. Set the Label Property to #{row.Dname}.(Where Deptno and Dname is the attribute of the iterator you use to fill selectOneChoice).
you can download an example from here.
super blog!!
ReplyDeletethat's what I need
Thanks Thomas
good stuff
ReplyDelete