Частичная отправка команды Iceface 2.0 не работает

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

В файле weather.jsf есть два выходных текста и ссылка на команду:

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

В управляемом компоненте:

@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? Я пробовал частично или немедленно, но не повезло.


person Takumi    schedule 30.11.2010    source источник


Ответы (1)


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

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

person Brian Leathem    schedule 30.11.2010