日期:2014-05-16  浏览次数:20434 次

jsf的总结上

最近一直在看JSF的网站学习,写了点心得,内容是乱七八糟。

?

JSF的过程:别人说是恢复视图,我也不知道恢复试图是什么意思.但是我的感觉就是,我想恢复视图的意思就是,将他的JSF动作通过html解析器解析成html的动作,例如如果用户这个时候只是点击了一个链接等简单的事情的话(也就是说我们没有必要进行验证,更新模型值等的操作),就直接跳出(execute complite),整个生命周期完 成,跳到render的周期。
第二个阶段是获得请求值,如果这个阶段发生了不可预知的错误,应该就响应完成了。

就算你的请求值是为空的话,也没有什么关系的,依旧去执行下一个阶段。

第三个部分才是调用validation的阶段
验证成功的话,就更新模型值阶段了,更新模型值没有什么错误的话,就调用你的action的方法了。

?

1.

rendered 这是一个逻辑判断表达式的属性,通过这个表达式结果是true,或者false来验证拥有该render的这个组件是不是要呈现到这个View中.

2.
JSF中我们进行导航的标准是faces-config.xml中进行配置,比如说,我们可以使用from-outcome 来进行调控
然后我们在写一个action中返回在faces-config.xml中form-outcome的值
但是在JSF2中,我们可以直接用action=“xxx"来进行导航。
JSF中我们可以采用h:selectBooleanCheckbox 的true或者false确定属性的显示
我们应该是用的是property-'is'来和后台的bean进行交互,这个无关规则,只是我们Java property 书写的规范罢了。

3.
Facelts里的ui:repeat 和h:datatable中的区别在于ui:repeat仍然是一种迭代的关系,而datatable确是一种表现结构了。

4.
标签<f:param/>这个就是用来进行传递参数的
5.
默认的我们使用的是action来进行导航,默认的是action是用来进行forward的命令的,但是我们可以使用
return ****?faces-redirect=true来将视图的请求由forward变成rediect命令.
6.
依赖注入的关系,managerbean是支持依赖注入的虽然没有spring有用但是,还是非常有用的,举个例子,通常注入的最好是一个ApplicationScoped的范围
@ManagedBean(eager=true)//这个是声明,这个managerBean是可以提供给managedbean注入的
public class Bean1{

....
}
@ManagedBean
public class Bean2{

@ManagedProperty(value="#{bean1}")
private Bean1 bean1;
.....
}
7.
JSF页面默认的predefinde variables
facesContext
param
header Request Headers
cookie
request,session
initParam
requestScope,SessionScope,ApplicationScope
8.
JSF2在Tomcat6(及以下版本)是不会支持EL中的方法带参数的表达式? 比如说#{bean.method(args)}这个会报错的。
但是在Java ee 6的环境(或者是tomcat7)是可以运行成功的.
9
faces-config.xml中 我们可以在Application中加入Resource-bundle属性来将我们classpath路径下的properties文件.
比如说我们约定在Resources这个目录下存放properties文件,那么我们就可以在写成
<base-Name>Resources.propertiesFileName
10.
我们可以使用properties中的{0} 与页面中的<f:param>结合来使用还有一个<h:outputFormat>结合来使用。
11.
当我们使用国际化的时候,我们应该注意的是使用
<f:view locale="#{facesContext.externalContext.requestLocale}">进行声明,值得注意的是,

view设置local的时候,只是在reload page的时候有用。但是不会在后台执行action后从新render页面的时候有用

但是我们在后台使用UIViewRoot对象设置local的时候,是相反的,只能在从新展现render页面的时候有用,但在reload页面的时候,是没有用的。解决的办法就是,如果我们真的想人为的操控local,前台后台,都写上代码。
12.
actionListener与action的区别
action 通常是将所在的form表单进行了提交,而并不是将所有的关于后台的数据都进行提交。
actionListener 一般自动将表单的值进行提交。
action = action controller
actionListener = action listener
actionListener 用来处理当前页面的变化,一般不会用于对页面跳转的控制,既然是listener就必须会监听什么东西,那么监听的就是一个事件ActionEvent,是一个单一的组件
action用来处理函数之后对页面进行控制比如说forward或者是redirect

actionListener会有一个ActionEvent参数,这个对象bunding 了它绑定的UIComponenet
我们再后台可以直接访问这个UIComponenet的attr的当前的属性
例如
event.getComponent().getValueExpression("attr").getValue(FacesContext.getCurrentInstance.getELContext());
我们还是可以查看这个属性上的表达式写法,比如说value="#{person.name}"
event.getComponent().getValueExpression("value").getExpressionString();
13.
valueChangeListener这个属性是用来产生一个valuechangeevent
我们可以使用getNewValue()来获得这个新的属性
这个属性基本上运用于flag true这样的组件中
14.
valueChangerListener ActionListener的区别
ActionListener发生的时候,会自动的提交form组件
valueChangerListener orrcur 的时候,是提交form组件的。
valueChangerListener的时候,我们通常需要写一个 onclick="submit()"配合一下,这个是主要用于处理浏览器的不兼容问题。
15.
JSF与AJAX相信这个是最让人兴奋的例子了
action 通常与ajax标签进行使用,由于是ajax,那么我们的action 肯定是不能返回一个值了。
<ajax render="@form"/>将这个表单进行全部更新
当我们在一个表单使用了<f:ajax/>的标签的时候,它是将(action默认将form里的数据提交的功能)废弃,只是执行action的方法,并不对bean进行赋值,这一定需要注意。
16.
ajax+JSF+js的运用,再好的jsf界面都必须有js的铺垫,
<f:ajax/>的属性是render,execute,event,onevent的其中event是表示我们使用的ajax的属性,而onevent表示的是event发生之后,我们采用的js函数名称
其中onevent的函数有一个data的参数,data有三个status
begin;complete;success;
例如
function jsfunction(data){
??? if(data.status == "begin"){
??? ????? dosomething......
??? }else if(data.status == "success"){
???????????