java - JSF GAE : Value Update Problem in managed bean method

标签 java google-app-engine jsf primefaces

我有以下一段代码,其中有一个简单的 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>

托管 bean 如下所示:

@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);}
}

bean 构造正确,在第一次单击图像后,h:ouputText 更新为 5。但是在我的日志消息中,我只在第一次单击图像时看到 Index: 0

类似于Jsf updates model value with old value ,但我有 JSF @ManagedBean 注释。

最佳答案

Action 监听器按照它们在 View 中定义的顺序被调用。您想要使用 action 而不是 actionListener。更重要的是,action 应该首先用于调用业务操作。

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

另见:

关于java - JSF GAE : Value Update Problem in managed bean method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7361734/

相关文章:

java - 如何解决 : Error:Execution failed for task ':app:kaptDebugKotlin' ?

java - URL连接和内容长度: how much data is download?

google-app-engine - 谷歌应用引擎 - javax.servlet.UnavailableException : Initialization failed

python - 如何在不使用 IDE 且不了解程序流程的情况下调试应用程序?

html - 用于在页面上汇总 CSS 选择器的 Firefox 扩展

java - jdbc数据集是否将所有行存储在jvm内存中

android - AppEngine RequestFactory 或 "Normal"方法?

javascript - JSF/PrimeFaces 客户端输入操作

java - JSF+Facebook 集成应用程序的设置不允许一个或多个给定的 URL。它必须与网站 URL 或 Canvas URL 匹配

java - Keycloak 管理客户端响应 Bad Request 以尝试列出领域