【问题标题】:onStart method is called AFTER onComplete methodonStart 方法在 onComplete 方法之后调用
【发布时间】:2014-07-14 10:42:10
【问题描述】:

我有一个按钮,我们称之为“Button1”:

<p:commandButton icon="ui-icon-document"
  value="Button1"
  onstart="#{bean.populateDependancies(item)}"
  update="myDialog"
  oncomplete="dialogWidget.show();">
</p:commandButton>

这个Button1 应该打开一个dialog,但是在打开它之前 我希望它在对话框中填充primefaces 选项列表的目标 中带有一些值(这项工作由方法populateDependancies(item) 完成)。

但实际上当我关闭对话框并点击primefaces的cellEditor的validateEdition按钮(甚至是取消按钮)时调用了方法populateDependancies(item)(注意:Button1 放置在可编辑数据表的列中。

我希望我清楚地解释了问题...如果还有什么不清楚的地方请告诉我


这是我的页面结构,也许它可以提供帮助:

这是我的方法:

public void populateDependancies(Release release) {
    if (release != null) {
        if (rfcsDualListModel.getTarget() != null || !rfcsDualListModel.getTarget().isEmpty()) {
            rfcsDualListModel.setTarget(null);
        }
        List<Rfc> rfcDejaAssocies = release.getRfcs();
        rfcsDualListModel.setTarget(rfcDejaAssocies);
    }
}

【问题讨论】:

  • 尝试“actionListener”而不是“onstart”
  • 已经试过了,按钮根本不调用方法

标签: jsf primefaces commandbutton onstart


【解决方案1】:

onstart 执行 javascript 代码,就像oncomplete#{bean.populateDependancies(item)} 必须是 actionactionListener 属性的值。

编辑:另外,必须使用process="@this"属性和值,以免提交整个表单。

【讨论】:

  • 我已经尝试过 action 和 actionListener 而不是 onStart,但没有人工作。他们不调用该方法。这很奇怪,因为我检查了方法签名,没关系
  • 你能把整个表单Button1嵌套的代码粘贴进去吗?
  • 我编辑了我的问题并添加了我的 xhtml 页面的结构......也许它会提供一些澄清
  • 是的,使用process="@this" 是我的第二个选择。该属性决定将与该请求一起提交哪些字段。如果不设置为@this,则所有嵌套按钮的表单都会提交到服务器端。在那种情况下,它会搞砸很多事情。
【解决方案2】:

问题通过使用命令按钮的actionListenerprocess="@this" 属性解决。但老实说,我不知道为什么它只通过添加process="@this" 才有效。如果有人知道原因.. 请告诉我。谢谢大家。

【讨论】:

  • 下次发MCVE,你会很快得到更好的帮助。另请参阅我们的jsf info page
  • 谢谢@perissf,但我认为我发布的代码足以说明问题。不是吗?
  • 默认是@form,所以听起来很奇怪。再次尝试删除它
  • 一种想法可能是,当使用@form 时,其他输入字段之一会导致异常,导致方法无法运行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-12
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-10
相关资源
最近更新 更多