我遇到了一个非常有趣的问题:当我尝试使用valueChangeListener的valueChangeEvent来访问selectOneMenu选择的值时。我有itemLabel而不是itemValue。
jsf snappet:
<p:selectOneMenu id="position" value="#{employmentBean.currentEmployment.positionId}" required="true" effect="fold" editable="true"
requiredMessage="Please select an available option." hideNoSelectionOption="true" immediate="true" valueChangeListener="#{employmentControlBean.handlepositionIdSelected}">
<p:ajax update="@form" />
<f:selectItem itemLabel="Select Position to Create Employment." itemValue="" />
<f:selectItems value="#{positionBean.vacantPositionMap.entrySet()}" var="entry" itemLabel="#{entry.value}" itemValue="#{entry.key}"/>
</p:selectOneMenu>
我的vacantPositionMap是
Map<String,String>
样式键/值对,键是位置Id,值是位置名称。
我的支持bean:
@Named(value = "employmentControlBean")
@SessionScoped
public class EmploymentControlBean(){
public void handlepositionIdSelected(ValueChangeEvent event){
........
String positionId = (String) event.getNewValue();
positionBean.setCurrentPosition((Position) positionBean.getPositionCache().get(positionId));
employmentBean.getCurrentEmployment().setPositionId(positionId);
}
}
从snappet上面你可以看到。我正在尝试在valueChangeEvent上获取selectOneMenu选定值。
使用ValueChangeEvent支持bean方法,我想通过使用ValueChangeEvent将JSF的itemValue传递给支持bean。
这是我在html中使用firebug发现的:
从上面的图片你可以看到,primeFaces正确渲染html,但是当我试图访问选定的值时,我得到了#34;总统&#34;。这不是我的预期,我期望得到&#34; POSTN20161215xxxxxx&#34;。
我的问题是:为什么ValueChangeEvent传递itemLabel而不是itemValue?我怎样才能得到正确的价值?
请指教!!