1、 Apply Request Values:把请求当中的数据设置到控件树当中对应的控件当中去。 iii. Process Validations:如果某一控件有配置Validator,则这些Validator将对刚设置的数据的正确性和合法性进行验证。 iv. Update Model Values:控件树上的控件更新其底层所对应的模型。 v. Invoke Application:对产生的事件进行分发。 vi. Render Response:构建作为响应的控件树。3 UI: 控件:JSF通过标签库,提供了一些主要控件的实现。包括标签,文本框,单选框,列表等。由于JSF使用一种类似于UI的方式
2、来组织组件,所以,除了基本的组件以外,还提供了一些用于布局的容器,例如面板等。在这里有一个要注意的地方就是,一般情况下,页面的内容应该放到JSF提供的view标签里面。 代码:% taglib uri= prefix=fhhtmlheadtitleTest/headbodyf:viewh:formpanelGrid columns=1outputLabeloutputText value=User ID/h:panelGrid/f:/body/htmlc) 事件处理:与Struts不同,由于JSF使用以控件树为中心的方式来处理请求,所以,她提供了一种额外的类似Swing的,事件处理的方式来处理
3、用户的输入事件。JSF提供了两种事件类型,ActionEvent,用于处理命令和ValueChangeEvent,用于处理数据更改。模型代码:package nick;public class UserActionListener implements ActionListener public void processAction(ActionEvent arg0) throws AbortProcessingException FacesContext context = FacesContext.getCurrentInstance(); ValueBinding binding = U
4、til.getValueBinding(#user); User user = (User) binding.getValue(context); String id = user.getId(); 页面代码: import=java.util.*2outputLabel for=idcommandButton id=regist value=注册actionListener type=nick.UserActionListenercommandButton注:通过嵌套actionListener标签,我们可以为一个控件注册监视器。4 数据绑定:数据绑定要解决的问题就是如何把模型中的值,绑定到
5、页面的控件上。在JSF当中这可以通过JSF所提供的配置文件来完成。配置文件:faces-configmanaged-beanmanaged-bean-name user managed-bean-class nick.User managed-bean-scope session /managed-bean/faces-configpublic class User private String id = Nick;public void setId(String id) this.id = id; public String getId() return this.id; inputText
6、 id=#user.id 通过配置文件,我们把nick.User类绑定到名称user上,然后页面的代码就可以直接使用#user.xxx来引用User这个类中的各个字段。5 页面流: 页面到控制器:JSF通过使用方法绑定的方式来定义从页面到控制器的跳转,和数据绑定相同,为了能够正确找到被绑定方法所在的类,我们需要首先在配置文件当中声明managed-bean,然后通过设置控件的action属性,定义页面到控制器的跳转逻辑。 public String regist() return public String login() login action=#user.regist#user.logi
7、n登陆上述的页面代码,把注册按钮的动作绑定到User类的regist()方法,把登陆按钮的动作绑定到User类的login()方法。因此,当这两个按钮被点击时,对应的方法将被调用,用于实现页面流的方法,必须声明为public,而且她不接受参数,且返回值必须为String。 控制器到页面:JSF通过名称绑定的方式,来定义从控制器到页面的跳转。为了实现从控制器到页面的跳转,我们需要在配置文件当中定义一些,这些rule主要定义了怎么根据上述action标签所绑定的方法的返回值来查找下一页面。from-view-id/index.jspnavigation-casefrom-outcomeregist
8、to-view-id/regist.jsp/navigation-caselogin/login.jsp上述的配置文件定义了一个,该rule指明了如果“/index.jsp”页面通过她内部的某个控件的action属性发生了跳转,那么当该跳转方法的返回值为字符串“regist”时,则页面将跳转到对应的“/regist.jsp”中,同理,如果返回值为“login”,则页面将跳转到“/login.jsp”。6 数据传输:在JSF的页面代码当中,通过数据绑定,我们把控件的value值,与某个后台的数据bean关联起来。而在前述的生命周期部分,我们看到,当一个JSF请求到达时,他需要经历Restore
9、View,Apply Request Value等步骤,而Apply Request Value部分的工作,就是把请求当中的值绑定到这个后台的bean之中,因此,我们不需要考虑页面中的Form值如何传入到后台的bean当中。进一步,如果录入控件的value属性,和命令控件的action属性都是绑定在同一个bean上的话,那么在页面跳转时,我们可以直接访问到bean的属性值。但是为了不污染模型,和实现控制与模型的分离,一般情况下,我们需要把输入控件的value值绑定到数据bean,而把命令控件的action值绑定到控制bean,由于两个bean不是同一个,所以,控制bean需要一种方法来获取数据
10、bean中的属性值。 action nick.Action message for=通过嵌套的convertXXX标签,我们可以为控件配置用于转换的转换器。我们可以使用两种方式来注册转换器,一是通过控件的convert属性,另外一种就是通过嵌套的convertXXX标签。如果在转换的时候发生错误,那么JSF将跳过转换以后的步骤,而直接跳到Render Response步骤,生成响应,并在FacesContext里添加一个出错的Message,该Message的内容可以通过message标签进行显示。 Validate(验证):在数据被交付后台处理以前,我们可以通过验证器,来验证输入的数据是否合法,这包括数值的大小,或者是
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1