方法调用后更新URL参数

时间:2018-07-18 12:23:26

标签: jsf-2

这应该很简单,但是我正在寻找其他问题,而我找不到适合我问题的正确答案。

我有一个JSF页面,该页面调用方法myController.load()

<f:metadata>
     <f:viewParam name="id" value="#{myController.id}" required="false"/>
     <f:viewAction action="#{myController.load()}" />

如果最初未使用该参数调用页面,则此方法将生成放置在id中的myController.id。我的问题是如何使导航栏上的URL反映此更改,即将此新参数插入URL。基本上:

->浏览至myPage.xhtml

->调用myController.load()并将myController.id设置为1

->反映在URL myPage.xhtml?id=1中。理想情况下,无需重新加载页面

1 个答案:

答案 0 :(得分:1)

您将需要阅读一些有关PRG(发布/重定向/获取)的信息。这是一个好的开始。

https://mobiarch.wordpress.com/2012/08/09/doing-post-redirect-get-pattern-in-jsf-2/

您将希望原始的JSF链接调用一个ActionListener,该操作将创建对myController的作用域引用,并将id属性设置为1,然后可以使用PRG重定向到您的页面。 PRG将根据需要使用bean的值正确地构建新URL。

这个ActionListener方法非常简单,仅用于说明...

// my ActionListener method
public String goToMyPage() {
    myController.setId(1); // assuming myController is declared in scope.

    return "myPage?faces-redirect=true&includeViewParams=true";
}

希望这可以帮助您入门。