【问题标题】:PrimeFaces: How do I declare and bind an AJAX "rowEdit" event to p:dataTable programmatically?PrimeFaces:如何以编程方式声明 AJAX“rowEdit”事件并将其绑定到 p:dataTable?
【发布时间】:2012-07-19 16:48:40
【问题描述】:

我还在开发我的数据表格 UI 应用程序,最后我是关于这个组件开发的最后阶段:内联单元格编辑。

首先,数据表是在Java端完全动态构建的,没有使用facelet声明来描述表。如果我有一个静态表声明,则可以指定编辑like this(请参阅 In-Cell Editing 一章):

<p:dataTable>
    ...
    <p:ajax event="rowEdit" listener="#{tableBean.onEdit}"/>  
    ...
</p:dataTable>

我可以很容易地在 Java 代码中使用dataTable.setEditable(true) 指定可编辑的数据表 - 它可以工作,请注意,编辑保存/取消图标效果很好,但在后端没有效果。由于数据表是动态呈现的,因此我无法以 PF ShowCase Labs 页面上指定的方式声明(我必须始终使用那里的侦听器吗?),我正在尝试使用以下内容:

public static AjaxBehavior createAjaxBehavior(MethodExpression expression) {
    final AjaxBehavior behavior = new AjaxBehavior();
    behavior.addAjaxBehaviorListener(new AjaxBehaviorListenerImpl(expression));
    return behavior;
}
...
dataTable.addClientBehavior("rowEdit", createAjaxBehavior(createMethodExpression(TableBean.class, "onEdit", void.class, new Class<?>[] {RowEditEvent.class})));

但是,当我添加 rowEdit 侦听器时,就像我在上面尝试做的那样,哇,我突然得到:mojarra is not defined 并且没有保存/取消行编辑按钮正在工作。好的,我发现描述并解决了here 的类似问题,手动包含了必要的脚本,现在客户端 JavaScript 错误消失了,但是 我仍然无法退出行编辑模式,并且行是还没更新

我浪费了一整天的时间试图弄清楚发生了什么,而且我看不到正确的方法。我是否只是遗漏了后面的某些内容(例如标识某行,或者可能在某处指定了其他内容——但我的 Java 代码没有生成任何超出 PF 示例中指定的内容),或者其他什么?

提前致谢。

【问题讨论】:

  • 您是否查看了showcase-labs Editable Datatable source code 或来自demo page 的来源?
  • @FlavioCysne,当然,这就是我的动态代码的灵感来源。

标签: jsf-2 datatable primefaces


【解决方案1】:

嗯,我刚刚在下面的方法中找出了真正的原因:

public static AjaxBehavior createAjaxBehavior(MethodExpression expression) {
    final AjaxBehavior behavior = new AjaxBehavior();
    behavior.addAjaxBehaviorListener(new AjaxBehaviorListenerImpl(expression));
    return behavior;
}

事实上,该方法实际上返回了javax.faces.component.behavior.AjaxBehavior (h:ajax?) 而不是org.primefaces.component.behavior.ajax.AjaxBehavior (p:ajax)——这是因为快速自动完成而发生的,所以我只是错过了这个事实。

我对 PrimeFaces 库没有回复任何错误感到沮丧。


只是为了完成问答:

  • Mojarra 2.1.7
  • PrimeFaces 3.2

【讨论】:

    【解决方案2】:

    现在(至少对于 PF 6.0)应该是org.primefaces.behavior.ajax.AjaxBehavior

    【讨论】:

    • 您好,我刚刚编辑了您的答案并没有投反对票,但这更像是对问题/答案的评论,而不是真正的答案。谢谢。
    猜你喜欢
    • 2013-11-28
    • 1970-01-01
    • 2015-03-19
    • 2012-09-30
    • 2018-11-25
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多