我还在开发我的数据表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示例中指定的内容),或者其他什么?
提前致谢。
答案 0 :(得分: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库没有回复任何错误。
只是为了完成Q&amp;答:
答案 1 :(得分:-1)
现在(至少对于PF 6.0)应该是org.primefaces.behavior.ajax.AjaxBehavior
。