【问题标题】:Call multiple bean method in primefaces simultaneously同时在primefaces中调用多个bean方法
【发布时间】:2013-09-17 12:48:24
【问题描述】:

我正在使用 primefaces-4.0 构建一个 Web 应用程序。我想在单击命令按钮时同时调用两个 bean 方法。我尝试使用 remoteCommand

<p:commandButton value="Submit" ajax="false"
                        actionListener="#{userBean.execute}"
                        onclick="callCorrelation()">
                    </p:commandButton>
                    <p:remoteCommand name="correlation" update="correlationDialog"
                        actionListener="#{userBean.correlation}" />

Java 脚本功能:

<head>
<script type="text/javascript">
    $(document).callCorrelation(function() {
        correlation ();
    });           
</script>
</head>

但它不起作用。

有没有其他方法可以同时调用两个bean方法?

【问题讨论】:

  • 您可以为action 属性设置一种方法,为actionListener 属性设置一种方法。

标签: jsf-2 primefaces


【解决方案1】:

您的具体问题是因为您已通过 ajax="false" 关闭了 ajax。这将创建一个同步表单提交,这使得无法触发 ajax 请求。如果您删除ajax="false",那么它可能会起作用,但如果一种方法依赖于另一种方法的结果,您仍然存在竞争条件。没有定义先执行哪个。

最好只使用一个命令组件。您可以同时使用actionactionListeneraction 用于业务操作。 actionListener 用于准备业务操作。如果您需要更多动作侦听器,只需嵌套一个 &lt;f:actionListener&gt;&lt;f:setPropertyActionListener&gt;

<p:commandButton value="Submit"
    actionListener="#{userBean.correlation}"
    action="#{userBean.execute}"
    update="correlationDialog" />

另见:

【讨论】:

  • 谢谢Balus..我试过去掉ajax但没有用。
  • 我也尝试使用您建议的单个命令组件,但在这种方法中,它首先执行关联方法,然后执行执行方法。但我想同时执行这两种方法,而不是一个one...那么有没有其他方法可以同时执行这两种方法?
  • 您究竟为什么要这样做?您是否意识到为此需要 2 个线程?上面的答案只是在 1 个最终用户交互中执行这两种方法。
  • 是的,完全正确..我需要并行运行的线程..但在实现线程之前,我正在寻找其他选项..如何在 JSF 中同时运行两个 bean 方法而不实现线程。
  • 实际上问题是如果我将这两个方法合并并创建一个在单击提交按钮后执行的单个 bean 方法。执行和加载 xhtml 页面需要花费太多时间。为了最大限度地减少这种加载和执行时间我用两种不同的方法转换了这个单一的方法。
猜你喜欢
  • 1970-01-01
  • 2016-06-14
  • 2015-12-10
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多