prime面向selectOneMenu中的默认值

时间:2014-02-20 14:25:22

标签: jsf primefaces

我对selectonemenu组件有问题 在视图我有这个代码:

<p:selectOneMenu id="city" value="#{logisticsController.selectedTrip}"  >  
                <f:selectItem itemValue="#{null}" itemLabel="Wybierz podroz" />  
            <f:selectItems value="#{logisticsController.tripList}" />  
            <p:ajax update="pojoPickList"  
                    listener="#{logisticsController.handleTripChange}" />  
</p:selectOneMenu>
logisticsController是SessionScoped bean并具有init方法:

@PostConstruct
public void init(){
SelectedTrip = null ;
}

但每当我刷新页面时,selectOneMenu会显示旧值。 我想设置默认值等于null,感谢您的帮助

1 个答案:

答案 0 :(得分:0)

首先,在完成依赖注入(http://docs.oracle.com/javaee/7/api/javax/annotation/PostConstruct.html)后,@ PostConstruct注释会向您的注入框架(Spring或其他)说明执行此方法。
为了简化,我们可以假设这个方法将在bean创建之后执行。
因此,因为它是一个会话范围的bean - 它只为用户会话创建一次。这就是在页面刷新时不调用方法“public void init()”的原因。

有两种简单的方法可以解决您的问题:
1)如果可能 - 将SessionScoped bean更改为RequestScoped,之后将在每个请求(每次刷新页面)上创建该bean 2)您可以在xhtml页面中添加init方法调用,如下所示:

...
#{logisticsController.init()}
<p:selectOneMenu id="city" value="#{logisticsController.selectedTrip}"  >  
                <f:selectItem itemValue="#{null}" itemLabel="Wybierz podroz" />  
            <f:selectItems value="#{logisticsController.tripList}" />  
            <p:ajax update="pojoPickList"  
                    listener="#{logisticsController.handleTripChange}" />  
</p:selectOneMenu>
...