在侦听器方法中获取p:selectOneMenu的选定itemValue?

时间:2014-05-22 18:31:46

标签: jsf primefaces

我正在使用primtefaces 3.5及以下代码来弹出p:selectOneMenu。在选择项目时,我想知道所选itemValue的值,即userStar.userStarId。 尝试过使用f:setPropertyActionListener或f:attribute或者在侦听器方法中传递值,但没有运气。

感谢您的时间和帮助。

<p:selectOneMenu editable="true" style="width:300px" value="#{starBean.newStarName}"> 
       <f:selectItems value="#{starBean.userStarList}" var="userStar" itemLabel="#{userStar.starName}" itemValue="#{userStar.userStarId}" />

     <p:ajax event="change" listener="#{starBean.changeValueListener}" process="@this" partialSubmit="true">

     </p:ajax>

 </p:selectOneMenu>

2 个答案:

答案 0 :(得分:0)

更改此

<p:selectOneMenu editable="true" style="width:300px" value="#{starBean.newStarName}">

<p:selectOneMenu editable="true" style="width:300px" value="#{starBean.userStarId}"> 

p:selectOneMenu值是此处的选定值。

答案 1 :(得分:0)

如果您想避免使用自定义转换器,可以将所有pojo放入Map中并将其加载到p:selectOneMenu,然后使用Map.get(K)获取所选的pojo。

初始化:

Map<String,UserStar> userStarMap = new LinkedHashMap<String,UserStar>();
UserStar user1 = new UserStar(...);
userStrMap.put(user1.userStarId, user1);
...
...
...

Facelt:

<p:selectOneMenu editable="true" style="width:300px" value="#{starBean.newStarName}"> 
    <f:selectItems value="#{starBean.userStarMap.values()}" 
                  var="userStar" itemLabel="#{userStar.starName}" itemValue="#{userStar.userStarId}" />

     <p:ajax event="change" listener="#{starBean.changeValueListener}" process="@this" partialSubmit="true">

     </p:ajax>

 </p:selectOneMenu>

监听器:

public void changeValueListener(){
    UserStar selectedUser = userStarMap.get(newStarName);
}