我有一个带有项目列表的数据表。对于某些项目,我将有一个带按钮的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调用后更新数据表列表的想法..
答案 0 :(得分:0)
您的dataTable需要在ajax响应中呈现。
如果没有关于jquery按钮如何生成ajax调用的更多细节,并且因为你使用了dataTable的组件绑定,我建议你在bean.delete()中添加代码。
FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add(dataTable.getClientId());
应该做的伎俩
答案 1 :(得分:0)
如果没有自定义的viewhandler,这是行不通的,这并不是一件容易的事(阅读:很多工作)。当你想在JSF中增加一层UI / ajax时,你应该真正看看现有的JSF组件库,如PrimeFaces,RichFaces和OpenFaces。对于您的特定情况,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>