f:view beforePhase 사용 방법

3821 단어 jspF#JSF
JSF1.2에서 탭에 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로 설정하는 Datable를 이 페이지에 표시합니다.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 1After Phase: RESTORE_VIEW 1
Before Phase: RENDER_RESPONSE 6total users are: 10After Phase: RENDER_RESPONSE 6End JSF Request!
보입니다,user.init 방법자는 여섯 번째 단계의 시작이 실행되기 시작했기 때문에 Before Phase 방법은 Phase Listener를 등록하는 것과 같고 이 페이지에 전문적으로 효력이 발생하기 때문에 JSP의 Page scope 효과와도 같아서 JSF1을 해결했다.1 개발 중에 발생한 Page Scope 문제

좋은 웹페이지 즐겨찾기