这是我的 JSF 的标签:
<p:selectOneMenu id="myLocales" value="#{propertyBean.localeId}" editable="true" >
<f:selectItem itemLabel="Select Locale" itemValue="" />
<f:selectItems value="#{propertyBean.locales.entrySet()}" var ="map" itemValue="#{map.key}" itemLabel="#{map.value}" />
</p:selectOneMenu>
这是我的 propertyBean 的 getLocales() 方法:
public Map<Integer,String> getLocales() {
Session session = HibernateUtil.getSessionFactory().openSession();
List<Locale> locales = session.createCriteria(Locale.class)
.list();
Map<Integer,String> localeMap = new HashMap<Integer,String>();
for (Locale locale : locales) {
localeMap.put(locale.getLocaleId(), locale.getLocaleName());
}
return localeMap;
}
在表单发布之后,我期待我在 Map 中设置为键的整数作为服务器端的 LocaleId,但不幸的是,我在服务器端将字符串标签作为 LocaleId。你能告诉我为什么会发生这种倒置以及如何纠正它。