如何在重定向后从后备bean加载数据

问题描述 投票:0回答:3

[当我不使用<redirect/>中的faces-config.xml标记时,它不会更新浏览器URL,但已成功从后备bean加载数据。当我使用<redirect/>时,浏览器URL会更新,但不会从后备bean加载数据。在这种情况下,如何从备份bean加载数据?

java jsf jsf-2
3个回答
0
投票

您可以在导航URL中使用faces-redirect=true例如

<h:form>
     <h:commandLink value="MyValue" action="MyPage?faces-redirect=true" />
</h:form>

没有在<redirect/>中定义faces-config.xml现在

  1. 浏览器URL将被更新
  2. 数据已成功从支持bean加载。

0
投票

仅在必要时基于某些请求参数,才在与目标页面关联的后备bean的(后)构造函数中执行加载工作。

例如

@ManagedBean
@RequestScoped
public class Bean {

    private Data data;

    @PostConstruct
    public void init() {
        data = loadItSomehow();
    }

    // ...
}

如果目标页面通过#{bean}引用了bean,那么它将被自动构造,并且您可以在构造函数或@PostConstruct方法甚至是附加到<f:event type="preRenderView">的侦听器方法中完成所有工作。用<f:viewParam>代替@ManagedProperty

另请参见:


0
投票

JSF将表单提交到当前页面而不是目标页面,因此,地址栏中显示的URL将始终为一个请求后面

示例:

Base-URL: example.org/index.jsf  // now we navigate to home.jsf
URL: example.org/home.jsf | Addressbar: example.org/index.jsf
// navigate to content.jsf
URL: example.org/content.jsf | Addressbar: example.org/home.jsf
// and so on 

通过使用faces-redirect=true参数,您告诉Servlet重新路由您的请求,以便地址栏更新到您所在的实际站点。如果用户应该能够显式标记此站点,则特别需要此行为。

因此,第一个问题是:该页面是否可以添加书签?如果是这样,您将必须通过在faces-config.xml中创建导航规则来使用redirect方法(就像您所做的那样),或者可以通过告诉动作组件(commandLink / Button)destination-viewId并附加使用隐式导航?faces-redirect=true。如果不需要为该页面添加书签(或需要GET请求的任何其他类型的操作),则可以省去这个问题,而只需坚持标准的POST请求即可。

欢呼声

© www.soinside.com 2019 - 2024. All rights reserved.