在ui:repeat内部时,不保留动作参数的值

时间:2012-01-13 06:16:52

标签: jsf-2 commandlink uirepeat

以下是我的代码:

<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>传递它,它完美地工作。谁能对此发表评论?

3 个答案:

答案 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:s​​howUpdatedAction,statusAction和一个简单的类状态)

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

打印ids很好

ID1 ___ 1

ID4 ___ 1

也许它与id的类型或与你的bean有什么关系?