Ajax渲染属性不起作用啊:JSF2中的dataTable

我在JSF 2.0中使用一个简单的应用程序有一些问题。

我尝试使用ajax支持构建ToDo列表。 我有一些todo字符串,我使用数据表显示。 在这个数据表中,我有一个commandLink来删除任务。 现在的问题是数据表不会被重新渲染。

          

谢谢你的帮助。

编辑(TodoController):

 @ManagedBean @SessionScoped public class TodoController { private String todoStr; private ArrayList todos; public TodoController() { todoStr=""; todos = new ArrayList(); } public void addTodo() { todos.add(todoStr); } public void removeTodo(String deleteTodo) { todos.remove(deleteTodo); } /* getter / setter */ } 

(看起来我没有足够的声誉评论别人的答案)

我认为FRotthowe建议用另一个元素包装表,并使用绝对引用(即从文档的根目录命名所有父容器)从标记引用它。

像这样的东西:

            

但是,使用绝对引用始终是问题的根源,并随着视图的增长呈指数级地增加重构时间。

有没有办法从标签中呈现表格(防止jsf在ajax事件中添加那些烦人的“:number_of_row”)?

我假设被一个表单包围?

在解决了这个问题一段时间之后,我用Google搜索了一个简单而干净的解决方案:将@form添加到 渲染属性中,瞧!

完整示例:

    #{task.name}         

帮助我的完整文章在这里: http : //blogs.steeplesoft.com/2009/10/jsf-2-hdatatable-and-ajax-updates/

我遇到了同样的问题并且认为如果你把一个元素(例如)放在桌子周围并重新渲染它,它就会起作用。 然而,我不太确定为什么会这样。 任何人?

出于某种原因,JSF正在修改按钮中标记中的id。 如果我写这个xhtml:

             

我得到这个HTML:

 

请注意,第二个按钮中的id是’j_idt7:table:0’,而我希望得到’j_idt7:table’,就像我在第一个按钮中那样。

这并不能解决问题,但可能有助于找到解决方法。

使用此代码:

               

您需要在您的h:表单中添加prependId =“false”

我遇到了同样的问题。

“有效”的一件事是在项目中添加richfaces ,并替换

 h:datatable 

通过a

 rich:datatable. 

这将生成正确的ID。