我有一个数据表,每行有一个"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=" "/>
</f:facet>
**<h:commandButton value="Delete activity" onclick="if(confirm(' Delete #{activityItem.name} ?'))return true; else return false;" action="#{adminPanelBean.deleteActivity(activityItem.id)}">
<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 :(得分: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}?')"