使用confirmDialog删除数据表中的行

时间:2013-12-13 14:25:10

标签: jsf-2 primefaces datatable

我的问题在于从数据表中删除项目。当我点击按钮删除确认对话框将出现确认从数据库中删除行。如果是这样,数据将被删除,但数据表不会更新,除非我退出并登录,如果我选择另一个项目,它甚至不会被删除。

<h:form id="form">
   <p:panel id="panelform" header="Databases"  >
      <p:dataTable value="#{dataMB.customersDatas}" var="item" id="datas"      rowsPerPageTemplate="5,10,15,20,25,30" paginator="true" rows="10" filteredValue="#{dataMB.filteredDatas}" selectionMode="single" rowKey="#{item.id}"selection="#{dataMB.selectedData}">
       <p:ajax event="rowSelect" update=":form:dataView, :form:deleteButton, :form:viewButton" listener="#{dataMB.onRowSelect}"/>
</p:dataTable>  
                <p:panel>
                  <p:commandButton style="width: 8%;height: 100%" id="viewButton" value="View" oncomplete="dataDialogView.show()" disabled="#{dataMB.disabled}" icon="ui-icon-search" title="data details"/>                 
                  <p:commandButton style="width: 8%;height: 100%" id="deleteButton" value="Delete" oncomplete="deleteDialog.show()" disabled="#{dataMB.disabled}" icon="ui-icon-trash"/>                 
                </p:panel>
   </p:panel>
</h:form>   
     <p:confirmDialog style="position: absolute; width: 50px; border-color: blue" id="deleteData"  message="Your Database Will be completely removed . Are you sure? "                 appendToBody="true" header="Delete Data" severity="alert" widgetVar="deleteDialog">                          
      <h:form>     
         <p:commandButton id="confirm" style="width: 25%;height: 100%" value="Confirm" actionListener="#{dataMB.deleteData()}" update=":form:datas" ajax="true" oncomplete="deleteDialog.hide(); purchase.hide();" >                             
          </p:commandButton>  
                <p:commandButton id="cancel" style="width: 25%;height: 100%" value="Later" onclick="deleteDialog.hide();" type="button" />                           
      </h:form>
     </p:confirmDialog>  
我的sessionScoped托管Bean

中的

deleteData()方法

 public String deleteData() {
        logger.log(Level.SEVERE, "*****delete Data***** ");
        dataBusinessLocal.deleteData(selectedData);
        return "datalist";
    }

1 个答案:

答案 0 :(得分:0)

JSF是基于会话的。为了同步客户端(浏览器)和服务器之间的状态,JSF使用隐藏字段javax.faces.ViewState。现在,您在给定页面上使用两个表单:

  1. 单击表单一上的操作按钮
  2. 确认表格二,更新表格一
  3. 的数据表

    因此,隐藏的输入字段viewState不再准确。我可能会尝试两种方式:

    确认框是否必须是花哨的JSF或javascript解决方案呢?

    <p:commandButton id="deleteButton" 
        value="Delete" 
        disabled="#{dataMB.disabled}" icon="ui-icon-trash"
        actionListener="#{dataMB.deleteData}"
        onclick="if (!confirm('really delete?')) { return false;}" />   
    

    可能会做类似的工作。

    可能性二:只需重新呈现整个表单或面板panelform,而不仅仅是数据表。这样,应该呈现新的javax.faces.ViewState,并且表单再次正常工作。

    此外,在某处添加<h:messages />并在每个步骤中更新它。如果出现意外错误,可能会在UI上显示错误。

    希望有帮助...