绑定过程发生在JSF 2中采取操作之前

时间:2011-12-22 06:45:42

标签: java jsf-2 primefaces

我正在使用PrimeFaces和JSF 2.0,我有这个布局:

<h:panelGroup layout="block" id="panelGroup" binding="#{bean.boundPg}" />
<p:commandButton value="Update" action="#{bean.updateMe}" update="panelGroup" /> 

其中,bean为SessionBean。通过使用log4j进行调试,我发现在执行操作getBoundPg之前绑定过程调用了updateMe。因此,视图总是过时的。

你知道为什么以及如何扭转这个顺序吗?谢谢!

-------------编辑---------------

我正在制作一个测验游戏的网络应用程序。

<h:panelGroup layout="block" id="pgContents" binding="#{bean.boundContents}" />
<p:commandButton value="Prev page" action="#{bean.prevPage}" update="pgContents" /> 
<p:commandButton value="Next page" action="#{bean.nextPage}" update="pgContents" /> 

pgContents包含许多h:pannelGroup个,每个子组包含一个显示测验内容的标签,一个h:inputText供玩家提供答案。由于某些原因,我不得不以编程方式生成pgContents个孩子。

Prev pageNext page按钮将检索上一组/下一组测验

下面是bean(跳过getter&amp; setters)

@ManagedBean(name = "bean")
@SessionScoped
public class LessonHelper {

    private int currentPage;
    private HtmlPanelGroup boundContents;

    public void prevPage() {
        // decrease currentPage
        // fetch contents
        // add children for boundContents (label, inputText)
    }

    // nextPage() is similar
}

我的问题是,当我单击上一个/下一个按钮时,在绑定过程中首先调用getter getBoundContents,稍后调用prevPage()/nextPage(),这会导致内容始终不在-date。

1 个答案:

答案 0 :(得分:1)

因为这是自然的方式,正如你在BalusC的这篇精彩教程中所看到的那样:http://balusc.blogspot.com/2006/09/debug-jsf-lifecycle.html

告诉我你想做什么,展示那个bean里面的内容,找到你问题的解决方案!