`

f:view beforePhase的用法

阅读更多

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

首先来看代码:

<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方法:

	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的问题

2
0
分享到:
评论
3 楼 hintcnuie 2008-05-24  
是这样子的,看下面的code:
public void init(PhaseEvent phaseEvent) {
System.out.println("Phase:"+ phaseEvent.getPhaseId());
System.out.println("execute init method...\n");

}
page:
<f:view beforePhase="#{loginBean.init}">
<f:loadBundle basename="com.bluedot.jsf.messages" var="msg"/>
<h:form>
<h:panelGrid border="1" columns="2">
<h:outputText value="#{msg.name}"></h:outputText>
<h:inputText value="#{loginBean.name}"></h:inputText>
<h:outputText value="#{msg.password}"></h:outputText>

<h:inputSecret value="#{loginBean.password}">
<f:validator validatorId="passwordValidtor"/>
</h:inputSecret>

</h:panelGrid>
<h:commandButton action="login" value="#{msg.login}"></h:commandButton>
<h:commandButton value="#{msg.reset}"></h:commandButton>
</h:form>
</f:view>
点击按钮时,会输出:
Phase:APPLY_REQUEST_VALUES 2
execute init method...

Phase:PROCESS_VALIDATIONS 3
execute init method...

Phase:UPDATE_MODEL_VALUES 4
execute init method...

Phase:INVOKE_APPLICATION 5
execute init method...
2 楼 yourenyouyu2008 2008-05-23  
beforePhase的方法在2-6每个阶段都会执行,但只是针对该页面,由于上面给的例子是直接响应的,所以只有6阶段执行了。
<f:phaseListener 标签和他实现相同的功能,并且可以添加到页面的任意地方,也可以指定执行的阶段。
1 楼 rockjava 2008-05-23  
用这种方法在页面有按钮提交事件的时候这个beforePhase="#{userList.init}"方法是不是还会被执行?

相关推荐

    微信小程序 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