以下是我的代码:
<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>
传递它,它完美地工作。谁能对此发表评论?
答案 0 :(得分:0)
我认为您应该尝试使用<c:forEach>
代替<ui:repeat>
。
答案 1 :(得分:0)
我无法准确地告诉你,为什么status.id
在你的情况下为0但你可以直接传递EL表达式中的整个status
对象。像这样:
<h:commandAction value="Like" action="#{statusAction.likeStatus(status)}" />
然后在您的likeStatus
中,您只需执行int statusId = status.getId()
或类似操作即可获得所需内容。
作为补充:使用<c:forEach>
实际上应该只是一个后备,因为人们说你不应该出于任何原因混淆JSTL和JSF。
答案 2 :(得分:0)
您在JSF页面中的代码很好,只需检查它...(在我这边生成bean:showUpdatedAction,statusAction和一个简单的类状态)
public void likeStatus(String id,long someVal){
System.out.println(id+"___"+someVal);
}
打印ids很好
ID1 ___ 1
ID4 ___ 1
也许它与id的类型或与你的bean有什么关系?