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

时间:2013-03-21 07:54:49

标签: jsf jsf-2

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

3 个答案:

答案 0 :(得分:0)

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

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

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

  1. 浏览器网址将会更新
  2. 数据从辅助bean成功加载。

答案 1 :(得分: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中创建导航规则来使用重定向方法(就像您一样),或者您可以通过告诉您的操作组件(commandLink / Button)destination-viewId来使用隐含导航并附加?faces-redirect=true 如果不需要为此页面添加书签(或需要GET请求的任何其他类型的操作),您可以放弃使用此操作,并坚持使用标准的POST请求。

干杯

答案 2 :(得分:0)

只需根据某些请求参数执行与目标页面关联的辅助bean的(post)构造函数中的加载作业。

E.g。

@ManagedBean
@RequestScoped
public class Bean {

    private Data data;

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

    // ...
}

如果目标页面通过#{bean}引用bean,那么它将自动构建,您可以在构造函数或@PostConstruct方法中完成所有工作,甚至可以连接到{{{ 1}}如果你碰巧有<f:event type="preRenderView">而不是<f:viewParam>

另见: