可以在命令按钮或命令链接的动作事件上将新行添加到关联的服务器端集合中,如果重新渲染整个表格,则可以在客户端显示新添加的行。
是否可以在客户端显示新添加的行而无需刷新整个数据表,使用部分呈现,借助AjaxKeys或其他东西?
在此先感谢您的帮助:)
可以在命令按钮或命令链接的动作事件上将新行添加到关联的服务器端集合中,如果重新渲染整个表格,则可以在客户端显示新添加的行。
是否可以在客户端显示新添加的行而无需刷新整个数据表,使用部分呈现,借助AjaxKeys或其他东西?
在此先感谢您的帮助:)
如果要添加新行,则必须重新渲染整个数据表。如果您想重新呈现现有列,AjaxKeys 可能很有用。
我也很想知道您的问题的答案,我可以使用传统的 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);
}