下面是我的代码:
<ui:repeat var="status" value="#{showUpdatedAction.statusUpdates}">
<h:panelGroup>
#{status.content}
<h:form>
<h:commandLink value="Like" action="#{statusAction.likeStatus(status.id,1)}" />
</h:form>
</h:panelGroup>
<ui:repeat>
#{status.content}
显示正确的值。当我使用#{status.id}
打印状态id时,它也会给出正确的值。但当我点击命令链接时,传递的status.id值总是0。
有人能告诉我为什么会发生这种情况吗?我该如何避免这种情况?
谢谢。
编辑1
有趣的是,当我不在函数中传递参数,而是使用<f:param>
传递时,它的工作非常完美。有人能对此发表评论吗?
我认为您应该尝试使用<c:forEach>
而不是<ui:repeat>
。
我不能确切地告诉你,为什么status.id
在你的情况下是0,但你可以直接在EL表达式中传递整个status
对象。像这样:
<h:commandAction value="Like" action="#{statusAction.likeStatus(status)}" />
然后在你的likeStatus
中,你只需做一个int statusId = status.getId()
或类似的事情,你就有了你想要的。
另外:使用<c:forEach>
实际上应该只是一个后备方案,因为人们说无论出于何种原因,都不应该将JSTL与JSF混合使用。
JSF页面中的代码很好,只是检查了一下…(在我这边也生成了beans:showUpdatedAction、statusAction和一个简单的类Status)
public void likeStatus(String id,long someVal){
System.out.println(id+"___"+someVal);
}
它打印的ID很好
id1___1
id4___1
也许这和身份证的类型有关,或者和你的豆子有关?