在ui内部时未保留操作参数的值:repeat



下面是我的代码:

<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

也许这和身份证的类型有关,或者和你的豆子有关?

相关内容

  • 没有找到相关文章

最新更新