我还在开发我的数据表 UI 应用程序,最后我讲到这个组件开发的最后阶段:内联单元格编辑。
首先,数据表是在Java端完全动态构建的,没有使用facelet声明来描述表。如果我有一个静态表声明,可以像这样指定编辑(请参阅 In-Cell Editing 章节):
<p:dataTable>
...
<p:ajax event="rowEdit" listener="#{tableBean.onEdit}"/>
...
</p:dataTable>
我可以轻松地dataTable.setEditable(true)
在 Java 代码中指定可编辑的数据表 - 它可以工作,请注意,编辑保存/取消图标运行良好,但在后端没有效果。由于我不能以 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
并且没有保存/取消行编辑按钮正在工作。好的,我发现这里描述并解决了类似的问题,手动包含必要的脚本,现在客户端 JavaScript 错误消失了,但是我仍然无法退出行编辑模式,并且行仍然没有更新。
我浪费了一整天试图弄清楚发生了什么,而且我看不到正确的方法。我是否只是错过了后面的某些内容(例如识别某行,或者可能在某处指定了其他内容——但我的 Java 代码没有生成超出 PF 示例中指定的任何内容),或者其他任何内容?
提前致谢。