最近一直在看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"){
dosomething....
}
}
17.
<h:outputText/>是不和后台进行交互的
正常的情况下,<h:outputText/>里面有一个escape的属性,这个属性是决定<h:outputText/>是不是要转义,如果需要转义就会变成<span></span>,如果不需要转义的话就会成为一个文本
18.
<form pretendID=""/>表示的是我们是不是要在<form/>里面的子元素中增加一个form的id
19.
关于validation的用法
用在后台action 阶段:这种可操作的范围就比较大。
<h:messages/>用来输出有关的信息格式不正确
将自己的信息加入到validation中使用FacesContext.getCurrentInstance().addMessage(“”,"message");
<h:inputText/> 有一个required的属性 requiredMessage的属性
缺点是:只能是不能为空,但是就是判断是不是为空,功能比较鸡肋。
好像还是和后台打交道。只不过在validation的阶段
convertMessage
validatir=#{bean.validatorMethod}
20.
validation的四个过程
required type validators bapassing validator
最后一个我们可以用immediate="true"来跳过这个检查。
21.immediate是什么意思,他并不是跳过validation的意思,是快速的意思
immediate如果在该组件设定了true的话就会对该组件进行优先执行,将标记为immediate为true的组件都执行一遍之后,如果没有addMessage(出错)的话,就会马上执行别的组件的validation过程,否则响应完成(就是说发生了错误),回到响应的页面。
22
我们还可以自定义validatormethod不过需要在view的页面制定一个validator的指令,然后在后面的方法中加入参数,最后如果没有完成我们的validation,我们增加一个FacesMessage,并且throw new ValidationException(message);
23.
在xhtml中自定义复合标签-----这个我认为是最让人兴奋的特点,至少不用自己敲写Java代码了
我们需要在/的虚拟主机的根路径下创建一个resources文件,然后创建一个文件夹的名字
如果你在别的页面引用这个复合组件的时候
比如说
xmlns:aaa="http://java.sun.com/jsf/composite/utils
我们就必须创建一个叫utils的文件夹
然后在这个文件夹下面创建一个xhtml的文件,假如你的组件叫做<aaa:bbbb/>
那么你的文件名叫做bbbb.xhtml
然后我们需要引用在bbbb.xhtml中设置我们组件的属性了
比如说我们的组件是有两个属性<aaa:bbbb ccc="" dddd=""/>
那么我们这么写
。。。。。html head body
<composite:interface>
<composite:attribute name="ccc"/>
<composite:attribute name="dddd"/>
</composite:interface>
<composite:implementation>
你的结构。。。
注意的是你可以使用#{cc.attrs.ccc}对attribute的引用
</composite:implementation>
还有一些可用的参数是
cc.parent --- 这个经常用于复合(nested)组件
cc.children
cc.childId
24.
通常我们使用一个select的值去ajax一个datatable对象,我们需要的是传入一个名字,根据这个名字Map.get(name);
25.
Facelets模板技术,就是说我们可以吧不同的页面的表现形式先定义下来,这个就是一种模板的方式。先把表现形式确定下来,然后再将数据的表现层用组件表示出来。
不同的是模板,而相同的却是组件的结构,而组件的结构的表现形式css却还是由模板里的css提供这就真正实现了,组件就是封装数据的容器,而容器的表现形式却是有css控制的,这个也是实现了表现层,容器层的分离。很好很强大。
我们首先定义模板,然后用
首先我们的页面是一个<ui:composition/>将模板加进来之后,只是在页面写出来我们<ui:define/>的容器.那么我们的容器,也有可能是一个复杂的<ui:composition/>
那么我们可以使用<ui:include/>将别的<ui:composition/>加进来。
这个过程就是,
我们首先写出来页面的模板,
然后再定制各种各样的容器
在访问的页面显示我们定制的容器,或者是官方第三方提供的容器。
通常,第二步是可以省略的,因为我们可以直接用第三方封装好的,或者直接在第三步中写出来。
<ui:define>...</ui:define>加进我们的组件
26.
还有就是我们在模板中引入js的时候,我们要注意的就是默认的是我们要建立一个resources的文件夹,然后我们在文件夹下面建立css/scripts/xx
也就是说,标准的jsf里面是有根目录下面有显示的文件,然后又一个resources文件存放各种各样的资源。但是properties文件除外,默认情况下,properties就是一个Java的文件,应该属于源代码的。
27.
JSF接收来自的页面的params参数
<f:view-Param/>
举个例子
<f:metadata>
<f:viewParam name="fg" value="#{colorPreferences.foreground}"/>
<f:viewParam name="bg" value="#{colorPreferences.background}"/>
</f:metadata>这个是接收的JSF的页面
发送的页面可以这么些
<h:link outcome="URL?xxx=xxx&xxxx=xxxx...."/>
或者使用<h:button outcome=""/>
如果这个值fg不为空的话,就将这个参数代表的值,给colorPreferences.foreground这个参数值。这种特性满足我们可以使用GET的方法代替默认的POST的方法
<h:link/>和<h:commandLink/>的区别就是,都表示<a/>但是<h:commandLink/>点击的时候,会触发一个提交<h:form/>的命令。
<h:button/>和<h:commandButton/>的区别在于<input type="button/submit"/>的区别
你还使用<f:viewParam><f:convert.../></f:viewParam>
JSF2允许你使用NON-JSF的页面向JSF传递参数
比如说
<form action="xx.jsf">
<input text name="fg"/>
<input button name=""/>
</form>
xx.jsf的页面可以是
<f:metadata>
<f:viewParam .../>
</f:metadata>
总结一下就是,我们可以通过JSF---》JSF(只能是link,button),NO-JSF---JSF,
但是可不可以进行back-ground---javacode---->JSF,或者说是JSF(Text)----GET--->JSF呢
我们可以采用在action的方法中
return url?faces-redirect=true&includeViewParams=true的方法进行确定
分享到:
相关推荐
JSF生命周期总结JSF生命周期总结JSF生命周期总结JSF生命周期总结JSF生命周期总结JSF生命周期总结
**JSF(JavaServer Faces)** 是一个Java平台上的用户界面框架,用于构建Web应用程序。它简化了开发过程,提供了一种组件化和事件驱动的方式来创建动态、交互式的Web界面。JSF的核心概念包括组件、事件、渲染和生命...
JSF(JavaServer Faces)是Java平台上用于构建Web应用程序的一种技术。它提供了一种组件模型,使得开发人员可以通过声明式的方式创建用户界面。在JSF中,HTML标签被扩展为JSF标签,提供了更丰富的功能和更强的数据...
JavaServer Faces (JSF) 技术是一种基于Java的Web应用程序框架,由Java Community Process (JCP) 标准化,旨在简化Web用户界面的开发。JSF的核心特性是组件驱动的开发方式,允许开发者通过拖放UI组件来构建页面,...
JavaServer Faces (JSF) 是一个用于构建用户界面的Java Web...总结来说,JSF通过其组件化、事件驱动的架构,为开发人员提供了强大的工具,简化了Web应用的构建,同时也提供了一种灵活的方式来处理用户交互和业务逻辑。
JavaServer Faces (JSF) 是Java平台上用于构建Web应用程序的一种组件模型。JSF 1.2是该框架的一个重要版本,它引入了一系列新特性和改进,提升了开发效率和用户体验。以下是对JSF 1.2新特性的详细解析: 1. **增强...
总结来说,这个例子涵盖了JSF的基本用法,包括Bean的创建、验证逻辑的实现、导航规则的配置,以及JSF与Tiles的初步集成。对于初学者,这是一个很好的起点,能帮助理解JSF如何处理用户交互、管理页面流程,以及如何与...
- **编写JSF页面**:在JSF页面上使用Ajax4JSF提供的组件,例如添加`<a4j:region>`来定义需要进行Ajax更新的区域。 - **处理Ajax请求**:在后台Bean中定义处理Ajax请求的方法,并通过JSF的EL表达式与页面组件进行...
总结来说,这个"JSF标签应用实例"提供了一个实际的环境来学习和实践JSF技术,包括标签的使用、组件的交互以及整个JSF应用的部署。通过深入研究和运行这个项目,开发者不仅可以理解JSF的基础,还能进一步掌握JavaWeb...
**JSF(JavaServer Faces)** 是一个Java平台上的企业级Web应用程序开发框架,由Sun Microsystems(现已被Oracle收购)开发。它为构建用户界面提供了一种组件化、事件驱动的方法,极大地简化了Web应用的开发流程。...
总结:《JSF实战》一书全面覆盖了JSF技术的各个方面,从基础概念到高级特性的应用,旨在帮助读者快速掌握并熟练运用JSF进行Web开发。通过阅读本书,开发者不仅可以了解到JSF的基本原理,还能通过实战练习提升实际...
JSF,全称为JavaServer Faces,是Java平台上用于构建用户界面的一种Web开发框架。它提供了一种组件模型和事件驱动的编程模型,使得开发者能够更方便地创建交互式的Web应用程序。在JSF中,转换器(Converter)和验证...
JSF框架支持多样的客户端设备,可以通过不同的方式(如响应式设计)来优化不同设备上的用户体验。 ##### 7. **Servlet容器** Servlet容器是运行JSF应用的基础环境。它负责加载和管理Servlet实例,并处理HTTP请求和...
综上所述,JSF不仅为Web开发带来了便利,而且通过其强大的组件架构和应用基础设施,使得开发者能够构建出高质量的Web应用程序。无论是对于初学者还是经验丰富的开发者而言,掌握JSF都将是一个有益的投资。通过不断...
EL是JSF中的核心部分,允许开发者在页面上方便地访问JavaBean属性和其他服务器端的数据。EL表达式可以嵌入在JSF组件的属性中,简化了数据绑定的过程。EL支持运算符、方法调用以及对JavaBeans的访问,使得页面代码...
**JSF(JavaServer Faces)** 是一种Java平台上的用户界面组件框架,用于构建Web应用程序。它提供了一种声明式的方式来创建用户界面,允许开发者使用HTML、XML(XHTML)和自定义标签来构建交互式的网页。JSF的核心...
2. **全面升级**:吸取了旧版本的运营经验,在功能设计上进行了针对性的改进和完善。 3. **核心技术**: - **RPC通信**:采用高效的RPC通信机制,利用Netty框架实现了异步事件驱动模型。 - **协议设计**:自定义的...