我正在一个JSF 2.0项目中工作,并且正在学习使用System Events的好处。然而,我所引用的《Core Java Server Faces 3rd Edition》一书列出了总共14种可以在f:event标签的type属性中使用的系统事件类型。他们中的一些工作如我所料,例如。uiccomponent标签上的" preendercomponent ",或者UIViewRoot标签上的" preenderview "。但是,除了这两件事,还有一些其他的事情,书中提到的其他事情都不成立。例如,我不能让事件的postRestoreState类型在ui组件上工作。相反,当JSF尝试呈现页面时,我得到一个ClassNotFound Exception,可能是系统事件类,它应该处理postRestoreState事件,或者我试图侦听的任何事件。
为什么其他事件类型不起作用?是否还有其他需要的库,或者是否有其他实现系统事件侦听器的方法需要使用。下面是一个这样的标签失败的例子:
<h:commandLink
action="editPlant"
value="#{appMessages.UsersNavigationAddPlant}"
styleClass="#{userSession.selectedStyle}"
>
<f:event type="postRestoreState" listener="#{userSession.setSelectedStyle()}" />
</h:commandLink>
看起来您需要完整的类名:
<f:event type="javax.faces.event.PostRestoreStateEvent" listener="#{bean.postRestoreState}"/>