在jquery中选择按钮后动态加载jsf数据表

时间:2011-04-20 14:21:38

标签: jsf jquery datatable jsf-2

我有一个带有项目列表的数据表。对于某些项目,我将有一个带按钮的jquery对话框提示。选择一个按钮说'是'将执行AJAX调用,并应从bean中的列表中删除该项(工作正常)并重新加载数据表列表(此更新未发生)。下面是我的代码片段..我正在使用JSF 2.0

  <h:dataTable binding="#{itemBean.dataTable}" value="#{itemBean.items}" 
    var="item" columnClasses="left,right" rowClasses="row1,row2" rows="4" >
        <h:column>
            <h:outputText styleClass="label" value="#{item.product.itemNo}"/>
        </h:column>
 </h:dataTable>

// ItemBean class - @Session scoped
private HtmlDataTable dataTable; 
private LinkedList<Item> items;

deleteRow(){ } method in bean is deleting item from the items list. 

 on button click in dialog prompt, .post ajax call is made as below.
    $.post('/WebApp/PromptAjaxServlet', {data:requestData}, function(response) {
                    if(validateResponse(response)){
                        $('#dialog-form').dialog('destroy');
                        $modalMessage.dialog('destroy');
                    } else {
                        // do
                    }
            });

有人可以帮助解决如何在ajax调用后更新数据表列表的想法..

2 个答案:

答案 0 :(得分:0)

您的dataTable需要在ajax响应中呈现。

如果没有关于jquery按钮如何生成ajax调用的更多细节,并且因为你使用了dataTable的组件绑定,我建议你在bean.delete()中添加代码。

FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add(dataTable.getClientId());应该做的伎俩

答案 1 :(得分:0)

如果没有自定义的viewhandler,这是行不通的,这并不是一件容易的事(阅读:很多工作)。当你想在JSF中增加一层UI / ajax时,你应该真正看看现有的JSF组件库,如PrimeFacesRichFacesOpenFaces。对于您的特定情况,PrimeFaces例如有<p:dialog> component

或者如果你真的坚持在jQuery的帮助下自制UI / ajax fanciness,那么你应该真正寻找一个基于动作的MVC框架,如Spring MVC,而不是像JSF那样的基于组件的MVC框架。

另见:


顺便说一句,为了通过“普通的vanilla”JSF实现您的功能需求,您还可以获取JavaScript的confirm()函数。

<h:column>
    <h:commandButton value="Delete" action="#{bean.delete}"
        onclick="return confirm('Are you sure?')" />
</h:column>