必须按两次命令按钮

Ila*_*Tal 8 jsf primefaces

我正在建立一个网页,现在注意我必须按两次命令按钮.任何命令按钮都有同样的问题,所以我想我会在其中一个上添加动作监听器以查看是否可以看到某些内容.

<h:form id="formP">
    <p:commandButton id="temp" value="photos" actionListener="#{viewBacking.debugBreakpoint()}" action="userPhoto" />
</h:form>
Run Code Online (Sandbox Code Playgroud)

支持豆有

public void debugBreakpoint() {
    int i = 0;
    i++;
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这确实有帮助.它只在第二次按下之后才能到达我的断点.我怀疑某个地方某个地方没有通过验证,但我想要一些方法来检测究竟出了什么问题 - 为什么我需要第二次推送?我可以在Glassfish中打开一些选项,还是可以查看调试信息转储的其他选项?我可以忽略转储,直到一切都稳定,然后看我第一次按下按钮时到底发生了什么.

有没有我可以使用的工具?

Bal*_*usC 13

当给定的父组件<h:form>已由另一个命令按钮/链接呈现/更新时,可能会发生这种情况<f:ajax>.然后,给定的表单将失去其查看状态,该状态仅在第一次提交表单后才会返回.然后,任何后续提交都将以通常的方式工作.这是由JSF JS API中的一个错误引起的,如JSF问题790中所述,该错误已在即将推出的JSF 2.2中修复.

你需要修复的另一个命令按钮/链接与<f:ajax>明确列举出的客户端ID <h:form>render.

<f:ajax render=":somePanel :formP" />
Run Code Online (Sandbox Code Playgroud)

另一种方法是用<f:ajax>PrimeFaces 替换它,<p:commandLink>或者<p:commandButton>不需要显式包含所有表单的客户端ID.PrimeFaces自己的JS API已经包含了这个修复程序.