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

发布于 2024-12-26 19:47:53 字数 652 浏览 2 评论 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} 显示正确的值。当我使用 #{status.id} 打印状态 ID 时,它也会给出正确的值。但是当我单击命令链接时,传递的 status.id 值始终为 0。

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

谢谢。

编辑 1

有趣的是,当我不是在函数中传递参数,而是使用 传递参数时,它工作得很好。有人可以对此发表评论吗?

Below is my Code:

<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} shows correct values. When I print id of status using #{status.id}, it also gives correct value. But when I click the command link, value passed is always 0 for status.id.

Can someone tell me why this happens and how can I avoid this?

Thank you.

Edit 1

Interestingly, when instead of passing the parameter in function, I pass it using <f:param>, it works perfectly. Can anyone comment on that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

断桥再见 2025-01-02 19:47:53

我认为您应该尝试使用 而不是

I think you should try using <c:forEach> instead of <ui:repeat>.

朕就是辣么酷 2025-01-02 19:47:53

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

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

然后在您的 likeStatus 中,您只需执行 int statusId = status.getId() 或类似操作,即可获得所需的内容。

作为补充:使用 实际上应该只是一种后备方案,因为人们说无论出于何种原因都不应该将 JSTL 与 JSF 混合使用。

I can't tell you exactly, why status.id is 0 in your case but you can directly pass the whole status object in your EL expression. Like so:

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

Then in your likeStatus you simply do a int statusId = status.getId() or similar and you have what you want.

As an addition: Using <c:forEach> should actually be just a fallback, because people say you shouldn't mix JSTL with JSF for whatsoever reasons.

著墨染雨君画夕 2025-01-02 19:47:53

您在 JSF 页面中的代码很好,只需检查一下...(也在我这边生成了 beans:showUpdatedAction、statusAction 和一个简单的类 Status)

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

,它打印了 ids 很好

id1___1

id4___1

也许它与id 的类型或者你的 beans 的类型?

Your code in the JSF page is just fine, just checked it... (generated the beans at my side too : showUpdatedAction, statusAction , and a simple class Status)

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

which prints the ids just fine

id1___1

id4___1

Maybe its something to do with the type of the id or something with your beans?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文