Richfaces数据表 - 添加新行而不重新渲染客户端上的整个数据表

时间:2010-12-29 08:13:52

标签: ajax jsf datatable richfaces richdatatable

可以在命令按钮或命令链接的操作事件上将新行添加到关联的服务器端集合中,如果整个表格重新显示,则可以在客户端上显示新添加的行。呈现

是否可以使用部分呈现在客户端 上显示新添加的行,而无需刷新整个数据 ,在 AjaxKeys 的帮助下?

提前感谢您的任何帮助:)

2 个答案:

答案 0 :(得分:1)

如果要添加新行,则必须重新呈现整个数据表。如果要重新呈现现有列,AjaxKeys可能很有用。

答案 1 :(得分:0)

我也非常有兴趣知道你的问题的答案, 我可以使用传统的Javascript实现这一点,但是当我使用rich:datatable时我无法在客户端添加新行。

但是我使用ajax调用服务器函数,这个函数将新的空行添加到dataTable List并再次渲染rich:datatable。

我的xhtml页面

<rich:column>
<f:facet name="header"><h:outputLabel value="#{msgs.notes}" style="font-size:15px;"/> </f:facet>
<h:inputText    value="#{line.notes}" >
    <a4j:ajax   event="blur" 
    execute="datatable" 
    render="datatable" 
    immediate="true" 
    listener="#{saleBacking.addNewLineInDataTable}"
    oncomplete="document.getElementById('myform:datatable:#{saleBacking.view_no_counter-1}:line').focus();"/>
</h:inputText>
</rich:column>

并且在maneged bean中

public void addNewLineInDataTable(AjaxBehaviorEvent event)
    {
        SaleLine saleLine = new SaleLine();
        saleLine.setId(salesLineslist.isEmpty() ? 1 : salesLineslist.get(salesLineslist.size() - 1).getId() + 1);
        salesLineslist.add(saleLine);
        saleLine = new SaleLine();
        saleLine = new SaleLine();
        saleLine.setSaleId(sale);
        saleLine.setViewNo(++view_no_counter);
        saleLine.setDiscount(0d);
        saleLine.setItemPrice(0d);
        salesLines.add(saleLine);
    }