0

以下是我的代码:

<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}显示正确的值。当我使用 打印状态 id 时#{status.id},它也给出了正确的值。但是当我单击命令链接时,status.id 传递的值始终为 0。

有人可以告诉我为什么会发生这种情况,我该如何避免这种情况?

谢谢你。

编辑 1

有趣的是,当我没有在函数中传递参数时,我使用 传递它<f:param>,它工作得很好。任何人都可以对此发表评论吗?

4

3 回答 3

0

我不能确切地告诉你,为什么在你的情况下是 0 但你可以直接在你的 EL 表达式中status.id传递整个对象。status像这样:

<h:commandAction value="Like" action="#{statusAction.likeStatus(status)}" />

然后在你身上,likeStatus你只需做一个int statusId = status.getId()或类似的事情,你就会得到你想要的。

作为补充:使用<c:forEach>实际上应该只是一个后备,因为人们说你不应该出于任何原因将 JSTL 与 JSF 混合使用。

于 2012-01-13T08:14:23.103 回答
0

我认为您应该尝试使用<c:forEach>而不是<ui:repeat>.

于 2012-01-13T07:40:24.007 回答
0

您在 JSF 页面中的代码很好,刚刚检查过...(在我身边也生成了 bean:s​​howUpdatedAction、statusAction 和一个简单的类 Status)

public void likeStatus(String id,long someVal){
    System.out.println(id+"___"+someVal);
}

打印ID就好了

id1___1

id4___1

也许它与 id 的类型或您的 bean 的类型有关?

于 2012-01-13T11:07:11.803 回答