2010-11-30 2 views
0

У меня есть страница, которая принимает параметры запроса для места, затем генерирует информацию, например, http://example.com/xxx/weather.jsf?place=california. Цель этого заключается в том, чтобы позволить пользователю закладок по ссылке.Iceface 2.0 commandLink partial submit не работает

В 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

Ваш bean-компонент @RequestScoped, поэтому после выполнения жизненного цикла JSF ваш экземпляр компонента будет потерян до тех пор, пока не поступит следующий запрос, после чего вы получите новый экземпляр вашего компонента, а PostContruct будет повторно выполняться.

Попробуйте изменить область действия вашего компонента на нечто более долговечное, например @ViewScoped.

Смежные вопросы