2010-11-30 35 views
0

我有一个页面,其中包含请求参数,然后生成信息,例如 ,例如http://example.com/xxx/weather.jsf?place=california。 这样做的目的是让用户为链接添加书签。Iceface 2.0 commandLink部分提交不起作用

在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方法吗? 我试过partialsubmit或立即,但没有运气。

回答

1

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

尝试将您的bean的作用域更改为更长的事情,比如@ViewScoped。