执行动作后如何将参数传递给h:commandLink?

How to pass a parameter to h:commandLink after action is executed?

我有一个标记为 "SaveAndView" 的命令链接。一旦我点击这个 link,这基本上是在当前页面 "a.xhtml" 上保存数据,然后生成一个 ID。然后它重定向到页面 "b.xhtml?id=|generatedID|" 以查看数据。如何将生成的 ID 传递给此 commandLink?

<h:commandLink action="#{mybean.save()}" 
               value="#{msg.saveAndView}" 
               target="_blank" includeViewParams="true">
    <f:param name="id" value="#{mybean.id}"/>
</h:commandLink>

上面的示例代码生成了一个空的 id 参数,因为还没有调用 save()

您似乎误解了 基本工作流程。你的情况如下:

  1. 用户填写待持久化实体的数据;
  2. 用户通过单击命令提交表单 link;
  3. Action方法被执行,其中:
    • 通过调用 entityService.persist(entity);;
    • 持久化新实体
    • 一个实体在那个方法执行后分配了一个id(即其中执行的事务已经提交);
    • 您在操作方法的 return 语句中将此 ID 作为查询参数传递,return "viewentity?id=" + entity.getId() + "&faces-redirect=true"; 以重定向到目标视图(假设您有一个不需要的数字 ID编码,你不需要传递任何其他参数);
  4. 在目标页面上使用 <f:viewParam name="id" ... /> 接收 id 并使用它来显示您想要的数据。

因此,要直接回答您的问题,您需要在操作方法中手动传递生成的 id