1JSF详解Word文档格式.docx

上传人:b****5 文档编号:21407151 上传时间:2023-01-30 格式:DOCX 页数:21 大小:85.64KB
下载 相关 举报
1JSF详解Word文档格式.docx_第1页
第1页 / 共21页
1JSF详解Word文档格式.docx_第2页
第2页 / 共21页
1JSF详解Word文档格式.docx_第3页
第3页 / 共21页
1JSF详解Word文档格式.docx_第4页
第4页 / 共21页
1JSF详解Word文档格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

1JSF详解Word文档格式.docx

《1JSF详解Word文档格式.docx》由会员分享,可在线阅读,更多相关《1JSF详解Word文档格式.docx(21页珍藏版)》请在冰豆网上搜索。

1JSF详解Word文档格式.docx

ApplyRequestValues:

把请求当中的数据设置到控件树当中对应的控件当中去。

iii. 

ProcessValidations:

如果某一控件有配置Validator,则这些Validator将对刚设置的数据的正确性和合法性进行验证。

iv. 

UpdateModelValues:

控件树上的控件更新其底层所对应的模型。

v. 

InvokeApplication:

对产生的事件进行分发。

vi. 

RenderResponse:

构建作为响应的控件树。

3. 

UI:

控件:

JSF通过标签库,提供了一些主要控件的实现。

包括标签,文本框,单选框,列表等。

由于JSF使用一种类似于UI的方式来组织组件,所以,除了基本的组件以外,还提供了一些用于布局的容器,例如面板等。

在这里有一个要注意的地方就是,一般情况下,页面的内容应该放到JSF提供的view标签里面。

代码:

<

%@pagecontentType="

text/html;

charset=gb2312"

%>

%@tagliburi="

prefix="

f"

h"

html>

head>

title>

Test<

/title>

/head>

body>

f:

view>

h:

form>

panelGridcolumns="

1"

>

outputLabel>

outputTextvalue="

UserID"

/>

/h:

panelGrid>

/f:

/body>

/html>

c) 

事件处理:

与Struts不同,由于JSF使用以控件树为中心的方式来处理请求,所以,她提供了一种额外的类似Swing的,事件处理的方式来处理用户的输入事件。

JSF提供了两种事件类型,ActionEvent,用于处理命令和ValueChangeEvent,用于处理数据更改。

模型代码:

packagenick;

publicclassUserActionListenerimplementsActionListener{

publicvoidprocessAction(ActionEventarg0)

throwsAbortProcessingException{

FacesContextcontext=FacesContext.getCurrentInstance();

ValueBindingbinding=Util.getValueBinding("

#{user}"

);

Useruser=(User)binding.getValue(context);

Stringid=user.getId();

}

}

页面代码:

import="

java.util.*"

2"

outputLabelfor="

id"

commandButtonid="

regist"

value="

注册"

actionListenertype="

nick.UserActionListener"

commandButton>

注:

通过嵌套actionListener标签,我们可以为一个控件注册监视器。

4. 

数据绑定:

数据绑定要解决的问题就是如何把模型中的值,绑定到页面的控件上。

在JSF当中这可以通过JSF所提供的配置文件来完成。

配置文件:

faces-config>

managed-bean>

managed-bean-name>

user<

/managed-bean-name>

managed-bean-class>

nick.User<

/managed-bean-class>

managed-bean-scope>

session<

/managed-bean-scope>

/managed-bean>

/faces-config>

publicclassUser{

privateStringid="

Nick"

;

publicvoidsetId(Stringid){

this.id=id;

publicStringgetId(){

returnthis.id;

<

inputTextid="

#{user.id}"

<

<

<

通过配置文件,我们把nick.User类绑定到名称user上,然后页面的代码就可以直接使用#{user.xxx}来引用User这个类中的各个字段。

5. 

页面流:

页面到控制器:

JSF通过使用方法绑定的方式来定义从页面到控制器的跳转,和数据绑定相同,为了能够正确找到被绑定方法所在的类,我们需要首先在配置文件当中声明managed-bean,然后通过设置控件的action属性,定义页面到控制器的跳转逻辑。

publicStringregist(){

return"

publicStringlogin(){

login"

action="

#{user.regist}"

#{user.login}"

登陆"

上述的页面代码,把注册按钮的动作绑定到User类的regist()方法,把登陆按钮的动作绑定到User类的login()方法。

因此,当这两个按钮被点击时,对应的方法将被调用,用于实现页面流的方法,必须声明为public,而且她不接受参数,且返回值必须为String。

控制器到页面:

JSF通过名称绑定的方式,来定义从控制器到页面的跳转。

为了实现从控制器到页面的跳转,我们需要在配置文件当中定义一些<

navigation-rule>

,这些rule主要定义了怎么根据上述action标签所绑定的方法的返回值来查找下一页面。

from-view-id>

/index.jsp<

/from-view-id>

navigation-case>

from-outcome>

regist<

/from-outcome>

to-view-id>

/regist.jsp<

/to-view-id>

/navigation-case>

login<

/login.jsp<

/navigation-rule>

上述的配置文件定义了一个<

,该rule指明了如果“/index.jsp”页面通过她内部的某个控件的action属性发生了跳转,那么当该跳转方法的返回值为字符串“regist”时,则页面将跳转到对应的“/regist.jsp”中,同理,如果返回值为“login”,则页面将跳转到“/login.jsp”。

6. 

数据传输:

在JSF的页面代码当中,通过数据绑定,我们把控件的value值,与某个后台的数据bean关联起来。

而在前述的生命周期部分,我们看到,当一个JSF请求到达时,他需要经历RestoreView,ApplyRequestValue等步骤,而ApplyRequestValue部分的工作,就是把请求当中的值绑定到这个后台的bean之中,因此,我们不需要考虑页面中的Form值如何传入到后台的bean当中。

进一步,如果录入控件的value属性,和命令控件的action属性都是绑定在同一个bean上的话,那么在页面跳转时,我们可以直接访问到bean的属性值。

但是为了不污染模型,和实现控制与模型的分离,一般情况下,我们需要把输入控件的value值绑定到数据bean,而把命令控件的action值绑定到控制bean,由于两个bean不是同一个,所以,控制bean需要一种方法来获取数据bean中的属性值。

action<

nick.Action<

packagenick;

privateStringid="

this.id=id;

publicStringgetId(){

returnthis.id;

publicclassAction{

Useruser=(User)

binding.getValue(FacesContext.getCurrentInstance());

#{action.regist}"

页面代码当中把输入控件的value绑定到了user的id上,把命令控件的action值绑

定到action的regist上。

当用户点击登陆按钮时,action的regist()方法将会被调用,

而在该方法内部,为了获取之前页面中的信息,我们可以使用ValueBinding类。

该类使用

的数据绑定表达式与页面中的类似。

通过之前的叙述,我们可以发现,当我们需要把数据从控制器传到页面时,我们同样可以使用数据绑定的方式,因为,当我们通过数据绑定表达式,获取到某个页面当中所使用的模型实例时,便可以在该实例上直接调用对应的set()方法,来设定所希望的值。

7. 

插件功能:

Converter(转换):

当模型中的某个字段需要在页面上显示时,她需要先被转换为字符串类型;

而用户在页面输入的字符串值,在传到模型中时也需要根据模型对应字段的类型,进行一个转换。

另外,由于国际化的要去,模型中的值在不同的地区会有不同的表示方式。

为了解决以上这些问题,JSF提供了Converter的实现,她主要做的事情就是根据所在的地区,对页面数据和模型数据进行双向的转换。

privateDatedate=newDate();

publicDategetDate(){

returndate;

publicvoidsetDate(Datedate){

this.date=date;

3"

date"

#{user.date}"

convertDateTimepattern="

M/d/yyyy"

inputText>

messagefor="

通过嵌套的convertXXX标签,我们可以为控件配置用于转换的转换器。

我们可以使用两种方式来注册转换器,一是通过控件的convert属性,另外一种就是通过嵌套的convertXXX标签。

如果在转换的时候发生错误,那么JSF将跳过转换以后的步骤,而直接跳到RenderResponse步骤,生成响应,并在FacesContext里添加一个出错的Message,该Message的内容可以通过message标签进行显示。

Validate(验证):

在数据被交付后台处理以前,我们可以通过验证器,来验证输入的数据是否合法,这包括数值的大小,或者是

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1