关于JSF学习的那些坑

1、JSF的重定向和一般的重定向不同
首先,一般的重定向,比如springMVC不管拦截的url是什么样的,/或者/spring/*重定向的时候重定向url是什么就在浏览器地址栏显示什么,如return “redirect:/login”,则浏览器地址栏一定显示localhost:8080/login
然而JSF的重定向不是这样的,如果JSF拦截的URL是/faces/*这种形式的那么重定向之后浏览器地址栏的url前面一定带有/faces/,比如faces-config.xml中定义的

<navigation-rule>
     <from-view-id>/index</from-view-id>
     <navigation-case>
        <from-outcome></from-outcome>
        <to-view-id>/login.xhtml</to-view-id>
        <redirect/>
     <navigation-case>
</navigation-rule>

重定向至/login,而JSF拦截的URL是/faces/这种形式的,那么浏览器地址栏显示的则是/faces/login.xhtml,且一定会被JSF拦截
2、JSF的请求转发也和一般的请求转发不同
导航文件中的<from-view-id>元素所指示的文件ID一定是文件的真实路径,无论URL是什么样的,即是/webapps/下的文件;<to-view-id>中所指示的文件ID如果JSF拦截URL为/faces/*这种,则可以为文件的真实路径,也可以为/faces/+文件的真实路径,且无论前缀有无JSF拦截URL标识,都会被JSF拦截,属于请求转发的范畴,但JSF中的请求转发一定会被JSF拦截,上述的重定向也是,一定会被JSF拦截,主要是无论是重定向还是请求转发JSF默认都会加上JSF的拦截前缀,这和一般的请求转发完全不同,一般的请求转发就只是按照请求转发的URL寻找文件,不会强制经过拦截URL
3、JSF隐式导航的一些规则
隐式导航默认在页面文件所在文件夹下寻找隐式导航的文件,且若无后缀,则寻找与页面文件后缀相同的文件
4、JSF获取HttpServletContext域对象

HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();

5、JSF中managedBean中方法的引用
在视图文件中使用托管Bean中的方法时有两种情况

  • 在标签元素属性中使用,如action = "#{userBean.login}",此时不需要再方法名后加括号,即不能传递参数
  • 在标签元素中作为其值使用,如 <p>#{userBean.login()}</p>,此时必须在方法名后加括号,此时可以传递参数

6、JSF托管Bean

  • 设置JSF Servlet在服务器启动的时候就初始化
<servlet>
		<servlet-name>JSFServlet</servlet-name>
		<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
</servlet>

这样在服务器启动的时候就会初始化托管Bean,而且托管Bean在作用域内是单实例的,即RequestScoped作用域的托管Bean在单次浏览器请求范围内是单实例的,请求转发和ajax都不是一次浏览器请求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值