Iceface 2.0 commandLink部分提交不起作用

时间:2010-11-30 10:02:08

标签: jsf jsf-2 icefaces

我有一个页面,它接收请求参数,然后生成信息, 例如,http://example.com/xxx/weather.jsf?place=california。 这样做的目的是让用户为链接添加书签。

在weather.jsf中,有两个outputtext和一个commandlink:

Humidity : <ice:outputText value="#{weatherBean.humidity}"/>
Visibility : <ice:outputText value="#{weatherBean.visibility}"/>
<ice:commandLink id="likeButton" 
  value="Like"
  actionListener="#{weatherBean.doLike}" />

在managedBean中:

@ManagedBean(name="weatherBean")
@RequestScoped
public class WeatherBean
{
 String humidity;
 String visibility;
 int numLike; 

 @PostConstruct
     public void init()
 {
  System.out.println("init called");
  HttpServletRequest request= (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
  String place = request.getParameter("place");
  setHumidity(WeatherDao.getHumidity(place));
  setVisibility(WeatherDao.getVisibility(place));
  setNumLike(GeneralDao.getNumLike());
 }

 public void doLike(ActionEvent event)
 {
  System.out.println("doLike called");
  GeneralDao.addNumberLike();
 }
}

好的,页面生成完美。 但是,当我单击doLike commandLink时, 它始终首先触发init方法,然后调用doLike方法。 由于请求参数为空,因此所有其他值都将重置。 有没有办法阻止刷新页面或调用init方法? 我尝试了部分提交或立即,但没有运气。

1 个答案:

答案 0 :(得分:1)

你的bean是@RequestScoped,所以在执行JSF生命周期后,你的bean实例会丢失,直到下一个请求进入,此时你得到一个bean的新实例,并重新执行PostContruct。

尝试将bean的范围更改为更长寿的内容,例如@ViewScoped。