当我不在<redirect/>
中使用faces-config.xml
标记时,它不会更新浏览器URL,但会从辅助bean成功加载数据。当我使用<redirect/>
时,浏览器URL会更新,但数据不会从辅助bean加载。在这种情况下,如何从辅助bean加载数据?
答案 0 :(得分:0)
您可以在导航网址中使用faces-redirect=true
例如
<h:form>
<h:commandLink value="MyValue" action="MyPage?faces-redirect=true" />
</h:form>
在<redirect/>
中没有定义faces-config.xml
现在
答案 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>
。