关键字: 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>
<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());
- }
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的问题
分享到:
相关推荐
::before 用法:view::before,表示在该view组件的前面加入内容 ::after 用法:view::after,表示在该view组件的后面加入内容 这里是双冒号,不是单冒号。单冒号是CSS2的内容,双冒号是CSS3
1. 使用 View 的优势:View 提供了丰富的用户体验、高效的桌面管理和灵活的应用程序交付等优势。 2. View 功能:View 提供了组件 cómointegrados、包括 View Agent、ViewPersona Management、View Composer、...
F:\学习\SystemView动态系统仿真软件》教材\SystemView动态系统仿真软件》教材.rarF:\学习\SystemView动态系统仿真软件》教材\SystemView动态系统仿真软件》教材.rar
总的来说,`traceview.bat` 的丢失是Android开发中常见的问题,及时恢复和了解其使用方法对于提升应用性能至关重要。同时,随着工具的发展,开发者也需要关注新的性能分析工具,以便更好地优化代码。
SystemView 软件使用方法及实例介绍 SystemView 软件是一种动态系统分析平台,用于现代工程与科学系统设计及仿真。它提供了一个友好且功能齐全的窗口环境,为用户提供了一个精密的嵌入式分析工具。SystemView 可以...
使用方法: 1、修改ubbsimple中环境变量 2、修改make.cmd文件中的环境变量 3、用viewc -n aud.v 进行编译,生成对应的 aud.h文件和 aud.VV文件 4、运行cmd,运行make文件 5、运行生成的clt.exe可执行文件 运行结果: ...
3. **初始化ganttView**:在文档加载完成后,使用`$(document).ready()`函数调用ganttView的初始化方法,传入数据源和配置选项。 4. **配置选项**:jQuery-ganttView允许自定义许多参数,如时间轴的刻度、颜色主题、...
1. **Example_view.zip**:包含了使用View自定义绘制的例子,展示了如何重写`onDraw()`方法来绘制基本图形。 2. **Example_surfaceview.zip**:展示了SurfaceView的基本用法,包括创建Surface、监听Surface状态变化...
本篇将深入探讨SystemView的中文使用方法,帮助用户更好地理解和操作这一强大工具。 一、SystemView概述 SystemView是由德国Rohde & Schwarz公司开发的一款软件,它提供了直观的图形化界面,能够实时显示和分析模拟...
ObjectAnimator rotationAnim = ObjectAnimator.ofFloat(view, "rotation", 0f, 90f); rotationAnim.setDuration(1000); // 设置动画持续时间 rotationAnim.start(); // 开始动画 ``` 另外,还可以结合`Transition`...
使用方法可见示例: 子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操作系统在STM32F407微控制器上进行任务跟踪和分析的一种方法,它结合了Segger SystemView工具。这个话题涉及到嵌入式系统、实时操作系统(RTOS)...
- 加载PDF文件:使用`LoadDocument`方法加载PDF文件,例如`pdfView1.LoadDocument("path_to_your_pdf.pdf");`。 3. **交互式浏览** - 控制视图:可以设置缩放级别、页码、旋转等,如`pdfView1.Zoom = 100;`...
在这个简单用法的示例中,我们将深入探讨如何使用QGraphicsView进行基本操作。 首先,我们需要包含必要的头文件,通常是`#include <QGraphicsView>`和`#include <QGraphicsScene>`。QGraphicsScene是QGraphicsView...
下面将详细介绍四种实现View监听的方法: ### 方法一:使用`implements`实现监听器 这是最直接的方式,通过让Activity或自定义View类实现`OnClickListener`接口,并重写其`onClick`方法。以下是一个示例: ```...
要让PopupWindow显示在指定View的上方,可以使用`showAsDropDown()`方法。这个方法需要传入目标View、相对于View的X偏移量和Y偏移量。为了使其水平居中,我们可以计算PopupWindow的宽度和目标View的中心位置,然后...
在iOS开发中,图标抖动效果通常用于错误提示...以上就是实现iOS图标抖动的三种方法,分别是使用Core Animation、UIView动画和SwiftUI。每种方法都有其适用的场景,开发者可以根据项目需求和自身技术栈选择合适的方式。
2. 使用硬件加速:开启硬件加速可以提高View的绘制性能,但并非所有情况都适用,需谨慎使用。 3. 适当使用ViewStub:当某个View在某些情况下不显示时,可以用ViewStub替代,减少内存占用。 4. 尽量避免在onDraw()中...
4. **查看和分析日志**: 文档`DebugView.docx`和`DebugView.pdf`提供了详细的图文教程,指导用户如何使用DebugView的各个功能,包括如何解读调试信息、如何进行高级调试等。 5. **测试程序`: `Demo For DebugView`...
要将一个View转换为Bitmap,我们主要使用`View.draw(Canvas)`方法。这个方法将View的内容绘制到指定的Canvas上。为了获取一个可以绘制的Canvas,我们可以创建一个`Bitmap`对象,并使用`Bitmap.createBitmap(int ...