Tuesday, April 26, 2011

ADF 11g Quicky : Select text from a resourcebundle

One of the questions I got lately is how to select a specific text from a resource bundle and use it in an ADF Application. This is easy and can be done as shown below.

All you need is a resourcebundle containing the keys and text values, a selectcomponent to set the actual key and some java code in a valueChangeListener to search the resourcebundle for the key. So first create the resourceBundle file to hold the key/value pairs for the text resources.

Next implement the page holding the selectcomponent, and an output component to show the value retrieved from the resourcebundle.
1:  <af:panelGroupLayout id="pgl1">  
2: <af:selectOneChoice valueChangeListener="#{pageFlowScope.resourceBundleManager.listEntryChanged}"
3: id="soc1" autoSubmit="true" valuePassThru="true"
4: label="#{viewcontrollerBundle.SEL_RESOURCE_KEY}">
5: <af:selectItem label="Value 1" value="WAARDE_EEN" id="si1"/>
6: <af:selectItem label="Value 2" value="WAARDE_TWEE" id="si3"/>
7: <af:selectItem label="Value 3" value="WAARDE_DRIE" id="si2"/>
8: <af:selectItem label="Value 4" value="WAARDE_VIER" id="si4"/>
9: </af:selectOneChoice>
10: <af:spacer width="10" height="20" id="s1"/>
11: <af:outputText value="#{pageFlowScope.resourceBundleManager.textValue}"
12: partialTriggers="soc1"
13: id="ot1"/>
14: </af:panelGroupLayout>

Finally implement the valueChangeListener in which we get the choosen value from the resource bundle.
1:  package com.blogspot.lucbors.view.beans;  
2: import java.util.ResourceBundle;
3: import javax.faces.context.FacesContext;
4: import javax.faces.event.ValueChangeEvent;
5: public class ResourceBundleManager {
6: public ResourceBundleManager() {
7: FacesContext messageContext = FacesContext.getCurrentInstance();
8: messageBundle =
9: ResourceBundle.getBundle("nl.amis.technology.view.ViewControllerBundle",
10: messageContext.getViewRoot().getLocale());
11: }
12: public void listEntryChanged(ValueChangeEvent valueChangeEvent) {
13: // Add event code here...
14: String newValue = (String)valueChangeEvent.getNewValue();
15: System.out.println(newValue);
16: setTextValue(messageBundle.getString(newValue));
17: }
18: public void setMessageBundle(ResourceBundle messageBundle) {
19: this.messageBundle = messageBundle;
20: }
21: public ResourceBundle getMessageBundle() {
22: return messageBundle;
23: }
24: public void setTextValue(String textValue) {
25: this.textValue = textValue;
26: }
27: public String getTextValue() {
28: return textValue;
29: }
30: private String textValue;
31: private ResourceBundle messageBundle;
32: }

And now with changing the selection in the listbox, the value of the text shown in the output text (in the green box) component is read from the resourcebundle and refreshed.

And that's all.

No comments: