0

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

4

3 回答 3

0

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

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

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

  1. 浏览器 URL 将被更新
  2. 数据从支持 bean 成功加载。
于 2013-03-21T08:07:40.923 回答
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

也可以看看:

于 2013-03-21T12:16:13.993 回答
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 请求。

干杯

于 2013-03-21T10:03:59.543 回答