http://stackoverflow.com/tags/selectonemenu/info
http://stackoverflow.com/questions/10655349/jsf-2-fselectitems-with-map-does-not-display-itemlabel
上記を参考にjavax.faces.model.SelectItemを使って、
ラベルを「ラベル:値」とした選択肢を実装しようとしたがうまくいかなった。
itemLabel属性に設定したのが有効にならず、単純にcountry.labelが表示されるだけとなってしまう。
なんでやーー
実装した内容
country.xhtml
<h:selectOneMenu value="#{bean.countryCode}">
<f:selectItems value="#{bean.countries}" var="country"
itemValue="#{country.value}" itemLabel="#{country.label + ':' + country.value}" />
</h:selectOneMenu>
Country.java
import javax.faces.model.SelectItem;
private String countryCode;
private List<SelectItem> countries;
@PostConstruct
public void init() {
countries = service.getCountries();
}
結論としては、SelectItemではなく自分で定義したBeanを使えばitemLabelが有効になった。
ソースは確認していないが、SelectItemを使うとその情報だけで表示しようとするみたい。
SelectItem使ってもitemLabelでカスタマイズしたらそれが有効になってほしいのに。。。
Country.java
import javax.faces.model.SelectItem;
private String countryCode;
private List<Country> countries;
@PostConstruct
public void init() {
countries = service.getCountries();
}