`

f:view beforePhase的用法

阅读更多

关键字: f:view beforephase的用法

在JSF1.2中,标签<f:view>中添加了beforePhase、afterPhase两个属性,这两个属性有什么用呢?本文就是来说明这个问题。

首先来看代码:

  1. <f:view beforePhase="#{userList.init}">  
  2.     <h:form>  
  3.         <h:dataTable border="1" value="#{userList.users}" var="usr" binding="#{userList.data}">  
  4.             <h:column id="column1">  
  5.                 <f:facet name="header">  
  6.                     <h:outputText value="Name"></h:outputText>  
  7.                 </f:facet>  
  8.                 <h:outputText value="#{usr.name}"></h:outputText>  
  9.             </h:column>  
  10.             <h:column id="column2">  
  11.                 <f:facet name="header">  
  12.                     <h:outputText value="Age"></h:outputText>  
  13.                 </f:facet>  
  14.                 <h:outputText value="#{usr.age}"></h:outputText>  
  15.             </h:column>  
  16.   
  17.             <h:column id="column3">  
  18.                 <f:facet name="header">  
  19.                     <h:outputText id="text3" value="Birthday"></h:outputText>  
  20.                 </f:facet>  
  21.                 <h:outputText value="#{usr.birthday}"></h:outputText>  
  22.             </h:column>  
  23.             <h:column id="column4">  
  24.                 <f:facet name="header">  
  25.                     <h:outputText id="text4" value="Gender"></h:outputText>  
  26.                 </f:facet>  
  27.                 <h:outputText value="Male" rendered="#{usr.gender}"></h:outputText>  
  28.                 <h:outputText value="Female" rendered="#{!usr.gender}"></h:outputText>  
  29.             </h:column>  
  30.             <h:column id="column5">  
  31.                 <f:facet name="header">  
  32.                     <h:outputText id="text5" value="Email"></h:outputText>  
  33.                 </f:facet>  
  34.                 <h:outputText value="#{usr.email}"></h:outputText>  
  35.             </h:column>  
  36.             <h:column id="column6">  
  37.                 <f:facet name="header">  
  38.                     <h:outputText id="text6" value="Country"></h:outputText>  
  39.                 </f:facet>  
  40.                 <h:outputText value="#{usr.country}"></h:outputText>  
  41.             </h:column>  
  42.             <h:column id="column7">  
  43.                 <f:facet name="header">  
  44.                     <h:outputText id="text7" value="Operation"></h:outputText>  
  45.                 </f:facet>  
  46.                 <h:commandLink value="Update" action="#{userList.update}" ></h:commandLink>  
  47.                    
  48.                 <h:commandLink value="Delete"></h:commandLink>  
  49.             </h:column>  
  50.   
  51.         </h:dataTable>  
  52.     </h:form>  
  53. </f:view>  
<f:view beforePhase="#{userList.init}">
	<h:form>
		<h:dataTable border="1" value="#{userList.users}" var="usr" binding="#{userList.data}">
			<h:column id="column1">
				<f:facet name="header">
					<h:outputText value="Name"></h:outputText>
				</f:facet>
				<h:outputText value="#{usr.name}"></h:outputText>
			</h:column>
			<h:column id="column2">
				<f:facet name="header">
					<h:outputText value="Age"></h:outputText>
				</f:facet>
				<h:outputText value="#{usr.age}"></h:outputText>
			</h:column>

			<h:column id="column3">
				<f:facet name="header">
					<h:outputText id="text3" value="Birthday"></h:outputText>
				</f:facet>
				<h:outputText value="#{usr.birthday}"></h:outputText>
			</h:column>
			<h:column id="column4">
				<f:facet name="header">
					<h:outputText id="text4" value="Gender"></h:outputText>
				</f:facet>
				<h:outputText value="Male" rendered="#{usr.gender}"></h:outputText>
				<h:outputText value="Female" rendered="#{!usr.gender}"></h:outputText>
			</h:column>
			<h:column id="column5">
				<f:facet name="header">
					<h:outputText id="text5" value="Email"></h:outputText>
				</f:facet>
				<h:outputText value="#{usr.email}"></h:outputText>
			</h:column>
			<h:column id="column6">
				<f:facet name="header">
					<h:outputText id="text6" value="Country"></h:outputText>
				</f:facet>
				<h:outputText value="#{usr.country}"></h:outputText>
			</h:column>
			<h:column id="column7">
				<f:facet name="header">
					<h:outputText id="text7" value="Operation"></h:outputText>
				</f:facet>
				<h:commandLink value="Update" action="#{userList.update}" ></h:commandLink>
				
				<h:commandLink value="Delete"></h:commandLink>
			</h:column>

		</h:dataTable>
	</h:form>
</f:view>

 

我们在这个页面上显示一个Datatable,在f:view中使用beforePhase,设为userList.init,下面来看user.init方法:

Java代码 复制代码
  1. public void init(PhaseEvent phaseEvent) {   
  2.     if (users.size() == 0) {   
  3.         for (int i = 0; i < 10; i++) {   
  4.             User user = new User();   
  5.             user.setName("Peter");   
  6.             user.setAge(i * 2 + 1);   
  7.             user.setBirthday(new Date());   
  8.             user.setCountry("China");   
  9.             user.setEmail("as" + i + "@sina.com");   
  10.             if (i % 2 == 0)   
  11.                 user.setGender(true);   
  12.             else  
  13.                 user.setGender(false);   
  14.             user.setIntroduction("Hello,Every One!");   
  15.             users.add(user);   
  16.   
  17.         }   
  18.     }   
  19.     System.out.println("total users are: " + users.size());   
  20. }  
	public void init(PhaseEvent phaseEvent) {
		if (users.size() == 0) {
			for (int i = 0; i < 10; i++) {
				User user = new User();
				user.setName("Peter");
				user.setAge(i * 2 + 1);
				user.setBirthday(new Date());
				user.setCountry("China");
				user.setEmail("as" + i + "@sina.com");
				if (i % 2 == 0)
					user.setGender(true);
				else
					user.setGender(false);
				user.setIntroduction("Hello,Every One!");
				users.add(user);

			}
		}
		System.out.println("total users are: " + users.size());
	}

 

在这段代码中,初始化了DataTable中的数据,也就是页面中的数据,下面是页面执行时候打印出来的生命周期记录:

Processing a new Request!

Before Phase: RESTORE_VIEW 1
After Phase: RESTORE_VIEW 1

Before Phase: RENDER_RESPONSE 6
total users are: 10
After Phase: RENDER_RESPONSE 6
End JSF Request!

可以看出,user.init方法字啊第六个阶段的开始被执行,因此我们可以认为,beforePhase方法相当于注册一个PhaseListener,并且专门在本页面生效,因此也相当于JSP中的Page scope的效果,解决了JSF1.1开发中遇到的Page Scope的问题

分享到:
评论

相关推荐

    微信小程序 CSS 选择器::after和::before的简单使用

    ::before 用法:view::before,表示在该view组件的前面加入内容  ::after 用法:view::after,表示在该view组件的后面加入内容  这里是双冒号,不是单冒号。单冒号是CSS2的内容,双冒号是CSS3

    最新VmwareHorizon7中文文档-View体系结构规划指南[借鉴].pdf

    1. 使用 View 的优势:View 提供了丰富的用户体验、高效的桌面管理和灵活的应用程序交付等优势。 2. View 功能:View 提供了组件 cómointegrados、包括 View Agent、ViewPersona Management、View Composer、...

    F:\学习\SystemView动态系统仿真软件》教材\SystemView动态系统仿真软件》教材.rar

    F:\学习\SystemView动态系统仿真软件》教材\SystemView动态系统仿真软件》教材.rarF:\学习\SystemView动态系统仿真软件》教材\SystemView动态系统仿真软件》教材.rar

    traceview.bat丢失

    总的来说,`traceview.bat` 的丢失是Android开发中常见的问题,及时恢复和了解其使用方法对于提升应用性能至关重要。同时,随着工具的发展,开发者也需要关注新的性能分析工具,以便更好地优化代码。

    SystemView使用方法及实例介绍

    SystemView 软件使用方法及实例介绍 SystemView 软件是一种动态系统分析平台,用于现代工程与科学系统设计及仿真。它提供了一个友好且功能齐全的窗口环境,为用户提供了一个精密的嵌入式分析工具。SystemView 可以...

    tuxedo view(view32)缓冲区 的使用简单例子

    使用方法: 1、修改ubbsimple中环境变量 2、修改make.cmd文件中的环境变量 3、用viewc -n aud.v 进行编译,生成对应的 aud.h文件和 aud.VV文件 4、运行cmd,运行make文件 5、运行生成的clt.exe可执行文件 运行结果: ...

    jQuery-ganttView 资源甘特图

    3. **初始化ganttView**:在文档加载完成后,使用`$(document).ready()`函数调用ganttView的初始化方法,传入数据源和配置选项。 4. **配置选项**:jQuery-ganttView允许自定义许多参数,如时间轴的刻度、颜色主题、...

    android之view和surfaceview用法示例汇总

    1. **Example_view.zip**:包含了使用View自定义绘制的例子,展示了如何重写`onDraw()`方法来绘制基本图形。 2. **Example_surfaceview.zip**:展示了SurfaceView的基本用法,包括创建Surface、监听Surface状态变化...

    systemview 中文使用说明

    本篇将深入探讨SystemView的中文使用方法,帮助用户更好地理解和操作这一强大工具。 一、SystemView概述 SystemView是由德国Rohde & Schwarz公司开发的一款软件,它提供了直观的图形化界面,能够实时显示和分析模拟...

    android view的旋转

    ObjectAnimator rotationAnim = ObjectAnimator.ofFloat(view, "rotation", 0f, 90f); rotationAnim.setDuration(1000); // 设置动画持续时间 rotationAnim.start(); // 开始动画 ``` 另外,还可以结合`Transition`...

    android的view遍历以及多重查找

    使用方法可见示例: 子View遍历 ViewGroup root = (ViewGroup) findViewById(android.R.id.content); LayoutTraverser.build(new LayoutTraverser.Processor() { @Override public void process(View view) { //...

    FreeRTOS Trace STM32F407 SystemView

    标题 "FreeRTOS Trace STM32F407 SystemView" 指的是使用FreeRTOS操作系统在STM32F407微控制器上进行任务跟踪和分析的一种方法,它结合了Segger SystemView工具。这个话题涉及到嵌入式系统、实时操作系统(RTOS)...

    PDFView4NET使用说明

    - 加载PDF文件:使用`LoadDocument`方法加载PDF文件,例如`pdfView1.LoadDocument("path_to_your_pdf.pdf");`。 3. **交互式浏览** - 控制视图:可以设置缩放级别、页码、旋转等,如`pdfView1.Zoom = 100;`...

    QGraphicsView类的简单用法

    在这个简单用法的示例中,我们将深入探讨如何使用QGraphicsView进行基本操作。 首先,我们需要包含必要的头文件,通常是`#include &lt;QGraphicsView&gt;`和`#include &lt;QGraphicsScene&gt;`。QGraphicsScene是QGraphicsView...

    实现一个view的监听的四种方法

    下面将详细介绍四种实现View监听的方法: ### 方法一:使用`implements`实现监听器 这是最直接的方式,通过让Activity或自定义View类实现`OnClickListener`接口,并重写其`onClick`方法。以下是一个示例: ```...

    让popupwindow显示在view的上方并与该view水平居中对齐

    要让PopupWindow显示在指定View的上方,可以使用`showAsDropDown()`方法。这个方法需要传入目标View、相对于View的X偏移量和Y偏移量。为了使其水平居中,我们可以计算PopupWindow的宽度和目标View的中心位置,然后...

    图标抖动三种方式

    在iOS开发中,图标抖动效果通常用于错误提示...以上就是实现iOS图标抖动的三种方法,分别是使用Core Animation、UIView动画和SwiftUI。每种方法都有其适用的场景,开发者可以根据项目需求和自身技术栈选择合适的方式。

    android 自定义view比较综合的例子

    2. 使用硬件加速:开启硬件加速可以提高View的绘制性能,但并非所有情况都适用,需谨慎使用。 3. 适当使用ViewStub:当某个View在某些情况下不显示时,可以用ViewStub替代,减少内存占用。 4. 尽量避免在onDraw()中...

    DebugView图文教程(内附程序)

    4. **查看和分析日志**: 文档`DebugView.docx`和`DebugView.pdf`提供了详细的图文教程,指导用户如何使用DebugView的各个功能,包括如何解读调试信息、如何进行高级调试等。 5. **测试程序`: `Demo For DebugView`...

    截取View转为图片

    要将一个View转换为Bitmap,我们主要使用`View.draw(Canvas)`方法。这个方法将View的内容绘制到指定的Canvas上。为了获取一个可以绘制的Canvas,我们可以创建一个`Bitmap`对象,并使用`Bitmap.createBitmap(int ...

Global site tag (gtag.js) - Google Analytics