我有一个带有项目列表的数据表。对于某些项目,我将使用带有按钮的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调用。
您的dataTable需要在ajax响应中呈现。
没有关于jquery按钮如何生成ajax调用的更多细节,并且由于您使用dataTable的组件绑定,我建议在bean.delete()中添加代码。
FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add(dataTable.getClientId());
应该能做到
如果没有自定义视图处理程序,这将无法工作,这并不是微不足道的(阅读:大量工作)。当你想在JSF中添加一层额外的UI/ajax功能时,你应该看看现有的JSF组件库,比如PrimeFaces、RichFaces和OpenFaces。对于您的特定情况,例如,PrimeFaces有一个<p:dialog>
组件。
或者如果你真的坚持在jQuery的帮助下自制UI/ajax,那么你应该寻找一个像Spring MVC这样基于动作的MVC框架,而不是像JSF这样基于组件的MVC框架。
参见:
- 为jQuery选择哪个Java web框架?
- 当UI可以用jQuery实现时,JSF还需要什么?
顺便说一下,为了达到您的功能要求,使用"原味"。在JSF中,你也可以直接抓取JavaScript的confirm()
函数。
<h:column>
<h:commandButton value="Delete" action="#{bean.delete}"
onclick="return confirm('Are you sure?')" />
</h:column>