Richfaces 数据表 - 添加新行而无需在客户端重新渲染整个数据表

发布于 2024-10-09 16:56:48 字数 215 浏览 6 评论 0原文

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

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

预先感谢您的帮助:)

The new row can be added to the associated server-side collection on an action event of a command button or a command link, and the newly added row can be displayed on the client if the whole table is re-rendered.

Is it possible to display the newly added row on the client side without needing to refresh the whole datatable, using the partial rendering, with the help of AjaxKeys or something ?

Thanks in advance for any help :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浅唱ヾ落雨殇 2024-10-16 16:56:48

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

You have to rerender whole datatable if you are adding a new row. AjaxKeys may be useful if you want to rerender existing columns.

放赐 2024-10-16 16:56:48

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

但我使用 ajax 调用服务器函数来做到这一点,该函数将新的空行添加到 dataTable 列表并再次渲染 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);
    }

I am very interested also to know an answer for your question,
I can achieve that using traditional Javascript, but when I use rich:datatable I cant add new rows on client.

But I did that using ajax calls to server functions, this function add new empty row to the dataTable List and render the rich:datatable again.

my xhtml page

<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>

and in the 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);
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文