JSF GAE: проблема обновления значения в методе управляемого компонента - PullRequest
2 голосов
/ 09 сентября 2011

У меня есть следующий фрагмент кода с простым h:outputText, указывающим на int и p:commandLink для установки значения:

<h:form id="f1">
  <h:outputText id="text" value="#{testBean.index}"/>
  <p:commandLink actionListener="#{testBean.test}" update="text">
    <f:setPropertyActionListener target="#{testBean.index}" value="5" />
    <h:graphicImage url="/images.png"/>
  </p:commandLink>
</h:form>

Управляемый компонент выглядит следующим образом:

@javax.faces.bean.ManagedBean @ViewScoped
public class TestBean implements Serializable{
  private int index; // getter/setter

  @PostConstruct public void init() {
    index = 0;log.log(Level.WARNING, "@PostConstruct");}

  public void test(ActionEvent ae){
    log.log(Level.WARNING, "Index: "+index);}
}

Бин составлен правильно, и после первого щелчка по изображению h:ouputText обновляется до 5 .Но в моем сообщении журнала я вижу только Index: 0 во время первого щелчка по изображению.

Это что-то похожее на Jsf обновляет значение модели старым значением , но у меня есть JSF @ManagedBean аннотация.

Ответы [ 2 ]

2 голосов
/ 09 сентября 2011

Слушатели действий вызываются в том порядке, в котором они определены в представлении.Вы хотите использовать action вместо actionListener.Более того, action должен в первую очередь использоваться для вызова бизнес-действия.

<p:commandLink action="#{testBean.test}" update="text">
    <f:setPropertyActionListener target="#{testBean.index}" value="5" />
    <h:graphicImage url="/images.png"/>
</p:commandLink>

См. Также:

0 голосов
/ 09 сентября 2011

Происходит то, что test ActionEvent запускается до применения значений запроса.

Чтобы лучше понять жизненный цикл фазы JSF и запуск событий жизненного цикла и ActionEvents, внедрите Debug PhaseListener, как указано в следующей статье блога.

http://balusc.blogspot.com/2006/09/debug-jsf-lifecycle.html

Это должно помочь вам понять, когда применяются значения запроса и когда запускаются события.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...