`h:commandLink`动作未被调用(可能是因为`ui:repeat`)

时间:2012-01-06 14:11:35

标签: jsf

这是代码:

<ui:repeat var="entity" varStatus="status" value="#{myentityListView.someList}">

                <h:form>
                <h:commandLink  value="Go!" action="mypage.xhtml" >
                <c:if test="#{entity.entityType=='Comment'}"><f:param  name="productId" value="#{entity.product.getId()}"/></c:if>
                <f:param  name="userId" value="#{entity.user.getId()}"/>
                </h:commandLink>
                 </h:form>

                </ui:repeat>

可能原因是h:commandLink位于ui:repeat

mypage.xhtml是一个exixting页面。

由于

1 个答案:

答案 0 :(得分:1)

您需要确保#{myentityListView.someList}在表单提交请求期间返回完全相同的值,就像在显示页面请求期间一样。将bean放在视图范围内(只标记它@ViewScoped)并确保在(post)构造函数或action方法中保留列表应该修复它。

另见:

但是,在您的特定情况中,最好只使用<h:link>,因为您根本不需要发送POST请求。通过这种方式,您最终可以使用友好的bookmarkable和searchbot-chipherable链接。

<ui:repeat var="entity" varStatus="status" value="#{myentityListView.someList}">
    <h:form>
        <h:link value="Go!" outcome="mypage.xhtml">
            <f:param name="userId" value="#{entity.user.id}" />
            <f:param name="productId" value="#{entity.product.id}" disable="#{entity.entityType != 'Comment'}" />
        </h:link>
    </h:form>
</ui:repeat>

另请注意,我通过删除它来修复您的<c:if>方法,因为它不会像您期望的那样工作。它总是会评估false。另请参阅JSTL in JSF2 Facelets... makes sense?

另见: