簡體   English   中英

JSF-<f:ajax> 無法呈現數據表</f:ajax>

[英]JSF- <f:ajax> can't render datatable

我有一個數據表,每行都有一個"delete"按鈕,我想在刪除該行的數據時重新渲染該表。

但我無法使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>

當我刷新頁面時,我看到該行已被刪除。 但我希望它是動態完成的。

在 action 方法中,您還需要從列表中刪除該項目(因此不僅僅是從數據庫中)。 我建議傳遞整個項目而不是僅傳遞 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;"

function 已經返回boolean 您無需在if中測試獲得的 boolean 即可返回另一個boolean 只需將其簡化如下:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM