2011-06-30 20 views
2

我有一個數據表,其中每行"delete"按鈕, ,我想在該行的數據被刪除時重新呈現該表。JSF- <f:ajax>無法呈現數據表

但我不能讓f:ajax正常工作。

這裏是的facelet頁的數據表:

<h:form> 
<h:dataTable value="#{adminPanelBean.activitiesList}" var="activityItem" id="allActivities" 
          styleClass="datatable" cellpadding="2" cellspacing="4" 
          columnClasses="ColName,colType,colTime,colPlace,colSummary" > 
       <h:column> 
        <f:facet name="header"> 
         <h:outputText value="Etkinlik"/> 
        </f:facet> 
        <h:outputText value="#{activityItem.name} "/> 

       </h:column> 
       <h:column> 
        <f:facet name="header"> 
         <h:outputText value="Türü"/> 
        </f:facet> 
        <h:outputText value="#{activityItem.type}"/> 
       </h:column> 
       <h:column> 
        <f:facet name="header"> 
         <h:outputText value="Tarih "/> 
        </f:facet> 
        <h:outputText value="#{activityItem.time}"/> 
       </h:column> 
       <h:column> 
        <f:facet name="header"> 
         <h:outputText value="Yer "/> 
        </f:facet> 
        <h:outputText value="#{activityItem.place}"/> 
       </h:column> 
       <h:column> 
        <f:facet name="header"> 
         <h:outputText value="Açıklama "/> 
        </f:facet> 
        <h:outputText value="#{activityItem.summary}"/> 
       </h:column> 
       <h:column> 
        <f:facet name="header"> 
         <h:outputText value="&nbsp;"/> 
        </f:facet> 
      **<h:commandButton value="Delete activity" onclick="if(confirm(' Delete #{activityItem.name} ?'))return true; else return false;" action="#{adminPanelBean.deleteActivity(activityItem.id)}">&nbsp; 
        <f:ajax event="click" render="allActivities" execute="@all" immediate="true"/> 
      <f:param name="activityId" value ="#{activityItem.id}" /> 
       </h:commandButton>** 
      </h:column> 
      </h:dataTable> 
     </h:form> 

當我刷新頁面,我看行被刪除。但我希望它能夠動態完成。

+0

我解決了改變渲染@form'' – Jaider

回答

1

在操作方法中,您還需要從列表中刪除項目(因此不僅僅是從數據庫)。我建議通過整個項目而不是唯一的ID,以便您可以利用List#remove()方法。

action="#{adminPanelBean.deleteActivity(activityItem)}"> 

所以,你可以做

public void deleteActivity(Activity activity) { 
    activitiesList.remove(activity); 
    // ... 
} 

無關的具體問題,你自己的方式如何使用confirm()是相當笨拙。

onclick="if(confirm(' Delete #{activityItem.name} ?'))return true; else return false;" 

該函數已經返回boolean。您不需要在if內測試獲得的布爾值以返回另一個boolean。只需把它簡化爲:

onclick="return confirm('Delete #{activityItem.name}?')" 
+0

嗯,我沒想到從取出的行項目首先列表,我在數據庫中刪除它,並從數據庫獲取所有項目再次列出... 但我試過你的解決方案,它的工作,謝謝! (並感謝js的幫助。) – Cagatay