我必须创建一个数据表组件(作为支持组件)。
分页(<h:commandLink>
之外的<h:dataTable>
)和排序(<h:commandLink>
中的<f:facet name="header">
)运行正常。但现在我想为每一行添加一个删除功能。我的faclet(<cc:implementation>
)中的部分代码如下所示:
<h:form id="form">
<h:dataTable id="table" value="#{cc.paginationPage.listings}" var="user">
<h:column>
<f:facet name="header">Delete</f:facet>
<h:commandLink id="btn">
<span>X</span>
<f:param value="#{cc.paginationPage.sortedColumn}" name="sorting_column"/>
<f:param value="#{cc.paginationPage.sortedColumnDirection}" name="sorting_direction"/>
<f:param value="#{cc.paginationPage.currentPage}" name="pagination_page"/>
<f:param value="#{user.id}" name="user_id"/>
<f:ajax execute="@form" event="click" render="@form" listener="#{cc.delete}" />
</h:commandLink>
</h:column>
</h:dataTable>
</h:form>
cc.delete
是我的bean(FacesComponent)中的一个函数,看起来像这样:
public void delete(AjaxBehaviorEvent event) {
System.out.println("delete!");
}
问题是listener
中的<f:ajax>
会被忽略。 ajax只调用bean中的init函数(使用<f:event listener="#{cc.init}" type="preRenderView"></f:event>
设置)。没有错误或异常。即使我试着打电话给listener="#{cc.doesentExist}"
。
我相信我的问题出现在BalusC's list的第4点(与评论中的kavain问题相同)。
但我不知道如何解决它,因为我不能将我的bean改为ViewScoped。那么,我怎样才能让<h:commandLink>
在这种情况下工作?有人可以帮帮我吗?
PS: 不幸的是,我只能使用普通的JSF(2.3)(没有像primefaces等框架允许)。
谢谢!