`

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics