Form的Rendered属性导致Ajax问题

时间:2012-11-28 17:49:48

标签: primefaces

我遇到了一个奇怪的问题。我正在尝试在模式对话框上放置多个表单,并且一次只能看到一个表单基于标志,从一个表单动态切换到另一个表单以响应用户操作。问题是,通过向表单添加呈现的属性会导致Ajax事件无法调用辅助bean中的服务器端方法。

以下表单和支持bean是简化副本,但它证明了这个问题。基本上,如果render =“#{requestScope.shouldRender}”从h:form id =“form2”中删除,当您在文本字段中输入时,一切都按预期工作,文本将显示在控制台上。如果将render =“#{requestScope.shouldRender}”添加到h:form id =“form2”组件,则根本不会调用该方法。

环境是: Primefaces 3.3 春天3.0 Websphere服务器7

以下是带有渲染属性的示例表单(删除以使其正常工作):

 <h:body>
        <h:form id="form1">
              <p:commandButton id="showButton" value="Show" update=":panel1">
                    <f:setPropertyActionListener value="#{true}"
                          target="#{requestScope.shouldRender}" />
              </p:commandButton>
        </h:form>

        <p:outputPanel id="panel1">
              <h:form id="form2" rendered="#{requestScope.shouldRender}">
                    <p:inputText id="fn" value="#{testBean.fn}">
                          <p:ajax event="keyup" listener="#{testBean.valueChangeListener}" />
                    </p:inputText>
              </h:form>
        </p:outputPanel>
  </h:body>

这是一个小支持bean:

    @Component
    @Scope("request")
    public class TestBean {
  private String fn;

  public void setFn(String fn) {
        this.fn = fn;
  }

  public String getFn() {
        return fn;
  }

  public void valueChangeListener() {
        System.out.println(fn);
  }

}

0 个答案:

没有答案