9

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

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

后备豆有

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

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

有什么我可以使用的工具吗?

4

5 回答 5

14

当给定的父组件<h:form>已被另一个命令按钮/链接渲染/更新时,可能会发生这种情况<f:ajax>。给定的表单将失去它的视图状态,它只有在第一次提交表单后才能恢复。任何后续提交都将按照通常的方式进行。这是由JSF 问题 790中描述的 JSF JS API 中的错误引起的,该错误在即将发布的 JSF 2.2 中得到修复。

您需要修复另一个命令按钮/链接,<f:ajax><h:form>render.

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

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

于 2012-05-30T13:31:53.190 回答
0

加上event="onclick"你的p:commandbutton
,我想这会解决的。

于 2012-05-30T10:59:50.827 回答
0

或者你可以在你的 commandButton 中添加这个 ajax="false" 属性

<p:commandButton ajax="false" action="#{userController.create}" value="#{bundle.CreateUserSaveLink}"></p:commandButton>
于 2013-01-25T06:00:25.340 回答
0

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

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

于 2014-09-03T13:47:50.307 回答
0

请检查您与 bean 的绑定。

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

于 2015-02-06T10:24:28.153 回答