【问题标题】:XPages EventHandler actionListener with this.action - actionListener does not fireXPages EventHandler actionListener with this.action - actionListener 不会触发
【发布时间】:2016-12-02 05:46:49
【问题描述】:

我正在开发 XPage。

我有一个用于 ContractsBean 的 managedBean。在 ContractsBean 中,我有一个方法 saveContract()。

在 XPage 上,我还有一个数据源绑定到另一个 NSF 中的文档,它的变量是标准的 #{document1}。

部分页面数据来自 NSF 文件,而页面的其他部分来自 DB2。

我正在使用 保存页面,一些数据进入 NSF,其他数据进入 DB2。我首先与 NSF 合作,并使用 document1 成功保存了数据。

然后我添加了一个 ActionListener 来调用事件侦听器,但事件侦听器没有触发。我删除了保存 document1 并且 ActionListener 正常触发。

我不能在同一个事件处理程序中同时拥有 xp:this.action 和 actionListeners 吗?

任何 JSF 大师,这可能看起来很熟悉......

<xp:button value="Submit" id="btnSubmit"
                styleClass="btn green pull-left">
                <xp:eventHandler event="onclick" submit="true"
                    refreshMode="norefresh" immediate="true">
                    <xp:this.action>
                        <xp:saveDocument var="document1"></xp:saveDocument>
                    </xp:this.action>
                    <xp:this.actionListeners>
                        <xp:actionListener
                            type="com.page.listeners.SaveContractListener">
                        </xp:actionListener>
                    </xp:this.actionListeners>
                </xp:eventHandler>

            </xp:button>

现在,如果我这样做,删除 xp.this.action 它可以工作,动作监听器会触发。

<xp:button value="Submit" id="btnSubmit"
                styleClass="btn green pull-left">
                <xp:eventHandler event="onclick" submit="true"
                    refreshMode="norefresh" immediate="true">

                    <xp:this.actionListeners>
                        <xp:actionListener
                            type="com.page.listeners.SaveContractListener">
                        </xp:actionListener>
                    </xp:this.actionListeners>
                </xp:eventHandler>

            </xp:button>

如果我不能在 EventHandler 中同时拥有两者,那么使用 ActionListener 获取 document1 的句柄(如何?)并将其保存在我的 actionListener 中的替代方法是什么?

【问题讨论】:

  • 您是否仅通过在设计器中“单击”来获得该来源?在这种情况下,它可能是一个设计器错误。否则(自己编写 xml 标记),您的代码无法正确转换为模型/html 输出。
  • 我使用了 domino Designer 来配置它。你是说,它不应该让我这样做吗?它不会抱怨构建。
  • 不,我是说您可以按照编译的方式键入 source,但不能按预期工作。另一方面,有时 Designer UI 可能会以这种方式生成源代码。我只是好奇而已。似乎您使它与添加的操作组一起使用。那是上述案例中的第二个:-)

标签: jsf xpages actionlistener


【解决方案1】:

我使用这个标记让它工作

<xp:button value="Submit" id="btnSubmit"
                styleClass="btn green pull-left">
                <xp:eventHandler event="onclick" submit="true"
                    refreshMode="complete" disableValidators="true" immediate="true">
                    <xp:this.action>

                        <xp:actionGroup>
                            <xp:saveDocument var="document1"></xp:saveDocument>

                        </xp:actionGroup>
                    </xp:this.action>

                    <xp:this.actionListeners>
                        <xp:actionListener
                            type="com.page.SaveContractListener">
                        </xp:actionListener>
                    </xp:this.actionListeners></xp:eventHandler>

            </xp:button>

【讨论】:

  • 这在技术上是可行的,但是使用 immediate="true",我的模型不会从 UI 更新,因此侦听器始终具有旧的 bean 值。我想我需要一种方法来访问侦听器中的 DataSource document1。此解决方案最适用于不需要更新模型的操作,例如导航或记录访问页面的用户等...
  • 如果出现验证错误或尝试将模型与 UI 绑定的错误(JSF 阶段 4 - 更新模型),则“调用应用程序”将永远不会运行,您会跳转到呈现响应。在对代码进行单元测试时,使用阶段侦听器有助于查看日志。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-10
  • 1970-01-01
  • 2015-01-22
  • 1970-01-01
相关资源
最近更新 更多