我有一个带有表单的自定义标记文件:
<h:form>
<h:commandButton value="click">
<f:ajax event="click" listener="#{bean[method]}" />
</h:commandButton>
</h:form>
我有条件地通过 ajax 渲染它,如下所示:
<h:panelGroup id="test">
<h:form>
<h:commandButton value="click">
<f:ajax event="click" listener="#{backingTest.updateFlag}" render=":test"/>
</h:commandButton>
</h:form>
<h:panelGroup rendered="#{backingTest.flag}">
<my:customtag bean="#{backingTest}" method="printMessage"/>
</h:panelGroup>
</h:panelGroup>
这是关联的支持 bean:
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean
@RequestScoped
public class BackingTest {
private boolean flag = false;
public void printMessage() {
System.out.println("hello");
}
public void updateFlag() {
flag = true;
}
public boolean getFlag() {
return flag;
}
}
当我单击第一个命令按钮时,updateFlag()
会正确调用该方法并正确显示第二个命令按钮。但是当我然后单击第二个命令按钮时,它永远不会点击该printMessage()
方法。在 Web 浏览器的 JS 控制台和 HTTP 流量监视器中,我可以看到click
事件已成功触发,并且 XHR POST 请求已成功发送。
如果我删除该rendered
属性,那么一切都会按预期工作。
这是如何引起的,我该如何解决?我正在使用 Mojarra 2.1.25。