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

时间:2015-02-11 14:11:15

标签: jsf jsf-2

我有一个标有“SaveAndView”的commandLink。一旦我点击此链接,基本上将数据保存在当前页面“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 个答案:

答案 0 :(得分:2)

您似乎误解基本工作流程。在您的情况下,它如下:

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