栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在JSF 1.x中对页面加载进行重定向

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在JSF 1.x中对页面加载进行重定向

将GET查询参数设置为托管属性,

faces-config.xml
以便您无需手动收集它们:

<managed-bean>    <managed-bean-name>forward</managed-bean-name>    <managed-bean-class>com.example.ForwardBean</managed-bean-class>    <managed-bean-scope>request</managed-bean-scope>    <managed-property>        <property-name>action</property-name>        <value>#{param.action}</value>    </managed-property>    <managed-property>        <property-name>actionParam</property-name>        <value>#{param.actionParam}</value>    </managed-property></managed-bean>

这样,请求

forward.jsf?action=outcome1&actionParam=123
将使JSF将
action
actionParam
参数设置为
action
和的
actionParam
属性
ForwardBean

创建一个小的视图

forward.xhtml
(如此之小,它在默认响应缓冲(通常2KB适合),这样它就可以通过navigationhandler被重置了,否则,你已经增加了servletcontainer的配置响应缓冲区),它调用bean方法上
beforePhase
的的
f:view

<!DOCTYPE html><html xmlns:f="http://java.sun.com/jsf/core">    <f:view beforePhase="#{forward.navigate}" /></html>

ForwardBean
可以是这样的:

public class ForwardBean {    private String action;    private String actionParam;    public void navigate(PhaseEvent event) {        FacesContext facesContext = FacesContext.getCurrentInstance();        String outcome = action; // Do your thing?        facesContext.getApplication().getNavigationHandler().handleNavigation(facesContext, null, outcome);    }    // Add/generate the usual boilerplate.}

navigation-rule
不言自明的(注意,
<redirect/>
这将做分录
ExternalContext#redirect()
,而不是
ExternalContext#dispatch()
在幕后):

<navigation-rule>    <navigation-case>        <from-outcome>outcome1</from-outcome>        <to-view-id>/outcome1.xhtml</to-view-id>        <redirect />    </navigation-case>    <navigation-case>        <from-outcome>outcome2</from-outcome>        <to-view-id>/outcome2.xhtml</to-view-id>        <redirect />    </navigation-case></navigation-rule>

另一种方法是

forward.xhtml
用作

<!DOCTYPE html><html>#{forward}</html>

并更新

navigate()
要在其上调用的方法
@PostConstruct
(将在bean的构造和所有托管属性设置之后调用):

@PostConstructpublic void navigate() {    // ...}

它具有相同的效果,但是视图方面并不是真正的自我记录。它基本上所做的就是打印

ForwardBean#toString()
(并在不存在时隐式构造bean)。


对于JSF2用户,请注意,有一种使用传递参数的更简洁的方法,

<f:viewParam>
以及一种通过处理重定向/导航的更可靠的方法
<f:eventtype="preRenderView">



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/450014.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号