Xpages基于JSF构建,因此有了生命周期的概念。一共分为6个周期。分别为:
1、RESTORE_VIEW
2、APPLY_REQUEST_VALUE
3、PROCESS_VALIDATION
4、UPDATE_MODEL_VALUE
5、INVOKE_APPLICATION
6、RENDER_RESPONSE
检测生命周期可用通过以下代码:
1 package combestv10;
2
3 import javax.faces.event.PhaseEvent;
4 import javax.faces.event.PhaseId;
5 import javax.faces.event.PhaseListener;
6
7 public class LifeCycleListener implements PhaseListener {
8
9 private static final long serialVersionUID = 1L;
10
11 public PhaseId getPhaseId() {
12 return PhaseId.ANY_PHASE;
13 }
14
15 public void beforePhase(PhaseEvent event) {
16 System.out.println("开始 PHASE :" + event.getPhaseId());
17 }
18
19 public void afterPhase(PhaseEvent event) {
20 //System.out.println("结束 PHASE :" + event.getPhaseId());
21 }
22
23 }
然后在face-config.xml文件中增加以下代码:
1 <lifecycle>
2 <phase-listener>combestv10.LifeCycleListener</phase-listener>
3 </lifecycle>
今天提到这个问题主要是因为我在处理按钮的click事件发现一个奇怪的现象,就是执行的时候只执行了生命周期1、2、6,把4、5跳过了,这样的结果就是数据没能保存到文档中。
在生命周期中4、UPDATE_MODEL_VALUE主要操作就是把数据写到Document中。
问题出现的时候后台也没有报错,后来在Xpages添加了一个"显示错误(多个)"控件,这个控件用来显示页面错误信息。之后执行按钮事件的时候出现了"验证错误:值无效",这样问题就找到了,由于在生命周期3、PROCESS_VALIDATION中没有通过,导致跳过4、5. 解决掉验证错误之后正常了。