这是代码:
<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页面。
由于
答案 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?