JSF- <f:ajax>无法呈现数据表</f:ajax>

时间:2011-06-30 11:51:56

标签: ajax jsf-2

我有一个数据表,每行有一个"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>

刷新页面时,我看到该行已被删除。但我希望它能够动态完成。

1 个答案:

答案 0 :(得分:1)

在操作方法中,您还需要从列表中删除该项目(因此不仅要从DB中删除)。我建议传递整个项目,而不是仅传递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}?')"