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

u2i*_*2ix 6 java jsf glassfish jsf-2

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

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

    <h:dataTable id="todoList" value="#{todoController.todos}" var="todo">
        <h:column>
                <h:commandLink value="X" action="#{todoController.removeTodo(todo)}">
                    <f:ajax execute="@this" render="todoList" />
                </h:commandLink>
        </h:column>
        <h:column>
            <h:outputText value="#{todo}"/>
        </h:column>
    </h:dataTable>
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

编辑(TodoController):

@ManagedBean
@SessionScoped
public class TodoController {

private String todoStr;
private ArrayList<String> todos;

public TodoController() {
    todoStr="";
    todos = new ArrayList<String>();
}

public void addTodo() {
    todos.add(todoStr);
}

public void removeTodo(String deleteTodo) {
    todos.remove(deleteTodo);
}

/* getter / setter */
}
Run Code Online (Sandbox Code Playgroud)

Ton*_*lba 9

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

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

像这样的东西:

<h:form id="form">
    <h:panelGroup id ="wrapper">
        <h:dataTable value="#{backingBean.data}" var="list">
            <h:column>
                <h:commandButton value="-" action="#{backingBean.data}">
                    <f:ajax render=":form:wrapper"/>
                </h:commandButton>
            </h:column>
    </h:dataTable>
    </h:panelGroup>
</h:form>
Run Code Online (Sandbox Code Playgroud)

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

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