必须按两次命令按钮

时间:2012-05-30 10:56:46

标签: jsf primefaces

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

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

支持bean有

public void debugBreakpoint() {
    int i = 0;
    i++;
}

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

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

5 个答案:

答案 0 :(得分:13)

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

您需要使用<f:ajax>修复另一个命令按钮/链接,以明确包含<h:form>中给定render的客户端ID。

<f:ajax render=":somePanel :formP" />

另一种方法是使用PrimeFaces <f:ajax><p:commandLink>替换此<p:commandButton>,这样您就不需要明确包含所有表单的客户端ID。 PrimeFaces自己的JS API已经包含了这个修复程序。

答案 1 :(得分:0)

event="onclick"中添加p:commandbutton 我想这会解决它。

答案 2 :(得分:0)

或者您可以在commandButton

中添加此ajax =“false”属性
<p:commandButton ajax="false" action="#{userController.create}" value="#{bundle.CreateUserSaveLink}"></p:commandButton>

答案 3 :(得分:0)

我遇到了同样的问题。解决方案很简单,而不是同时拥有actionListener和action,只需将actionListener方法转换为将字符串返回到要导航到的位置,并将其用作操作的方法(并且没有actionListener)。

简单来说:使用操作(不要在提交表单的commandButton上使用actionListener)。

答案 4 :(得分:0)

请检查您与bean的绑定。

bean字段应该是String或非原始的。