In my JSF application with Primefaces 5.3 I have a SelectOneMenu with SelectItemGroup entries where the entries need to be translated.
My XHTML snippet:
<p:selectOneMenu id="status" value="#{bean.status}">
<f:selectItems value="#{bean.statusItems}"
var="status"
itemLabel="#{bundle[status.label]}"
itemValue="#{status}"/>
</p:selectOneMenu>
Here I use "#{bundle[status.label]}"
to translate but always the labels as generated in the Bean class are shown and never the translated strings from my resource bundle!
My Bean class snippet:
public class Bean {
@PostConstruct
public void init() {
SelectItemGroup g1 = new SelectItemGroup("status.offerPhase");
g1.setSelectItems(
new SelectItem[]{
new SelectItem("untreated", "status.offerPhase.untreated"),
new SelectItem("In Progress", "status.offerPhase.untreated.inProgress"),
});
SelectItemGroup g2 = new SelectItemGroup("status.ongoing");
g2.setSelectItems(
new SelectItem[]{
new SelectItem("Order received", "status.ongoing.orderReceived"),
new SelectItem("Ongoing construction site", "status.ongoing.ongoingConstructionSite"),
});
SelectItemGroup g3 = new SelectItemGroup("status.completed");
g3.setSelectItems(
new SelectItem[]{
new SelectItem("Finished", "status.completed.finished"),
new SelectItem("Archived", "status.completed.archived"),
});
statusItems = new ArrayList<>();
statusItems.add(g1);
statusItems.add(g2);
statusItems.add(g3);
}
private List<SelectItem> statusItems;
public List<SelectItem> getStatusItems() {
return statusItems;
}
}
It does also not work if I don't use SelectItemGroups like this:
@PostConstruct
public void init() {
statusItems = new ArrayList<>();
statusItems.add(new SelectItem("untreated", "status.offerPhase.untreated"));
statusItems.add(new SelectItem("In Progress", "status.offerPhase.untreated.inProgress");
}
Using enums like this works:
<p:selectOneMenu id="status2" value="#{bean.statusEnum}">
<f:selectItems value="#{bean.statusEnum}"
var="status"
itemValue="#{status}"
itemLabel="#{bundle[status.name()]}"/>
</p:selectOneMenu>
public enum Status {
STATUS_UNTREATEFD, STATUS_IN_PROGRESS, STATUS_COMPLETED
}
public Status[] getStatusEnum() {
return Status.values();
}
Bundle Properties:
STATUS_UNTREATED=Untreated
STATUS_IN_PROGRESS=In Progress
status.offerPhase.untreated=Untreated
status.offerPhase.inProgress=In Progress
What am I doing wrong here?