最近做 JSF和我们自己实现的 pageFlow的整合,基本已经完全调通了。过程中间考虑到了对JSF的 PhaseListener的扩展,后来发现这个思路对我们这个工作并没有帮助,但是 已经摸透了这个技术点,就记录下来,以后可以查查看。
1)faces-config.xml的编辑
<lifecycle>
<phase-listener>com.primeton.jsf.FlowPhaseListener</phase-listener>
</lifecycle>
就可以了。
2)listener的编辑
因为马上就要从 自己的代码中把这个多余的代码去掉,所以,还是把code全部copy出来吧。
public class FlowPhaseListener implements PhaseListener {
public void afterPhase(PhaseEvent event) {
// TODO Auto-generated method stub
}
public void beforePhase(PhaseEvent event) {
FacesContext context=event.getFacesContext();
HttpServletRequest request=(HttpServletRequest)( context.getExternalContext().getRequest());
UIViewRoot root=context.getViewRoot();
String theActionString=getActionString(root);
if(theActionString==null)
return ;
else
{//下面是我们想在listener中做的事情
int i=theActionString.indexOf(".flow");
request.setAttribute("_eosFlowID", theActionString.substring(0, i+5));
request.setAttribute("_eosFlowAction", theActionString.substring(i+6,theActionString.length()));
}
}
//访问组件树哦,这个功能不错
private String getActionString(UIComponent comp)
{
String theActionString=null;
for (Iterator it = comp.getFacetsAndChildren(); it.hasNext(); )
{
UIComponent childOrFacet = (UIComponent)it.next();
if(childOrFacet instanceof ActionSource)
{
ActionSource source = (ActionSource) childOrFacet;
theActionString=source.getAction().toString();
if(null!=theActionString&&theActionString.length()>0&&theActionString.indexOf(".flow")>0)
return theActionString;
}
theActionString=getActionString(childOrFacet);
}
return theActionString;
}
//指定某个阶段
public PhaseId getPhaseId() {
// TODO Auto-generated method stub
return PhaseId.PROCESS_VALIDATIONS;
}
PhaseListener的思路和在JSF中的地位大家应该都已经清楚的,否则应该也不会看这个文章,这里就不说了。
分享到:
相关推荐
API提供了如`UIComponent`、`FacesContext`、`PhaseListener`等核心组件和上下文对象,它们构成了JSF生命周期的基础。开发者可以使用这些接口来创建自定义组件,实现监听器,以及处理请求和响应。 ### 2. `jsf-ri` ...
最后,**富客户端组件(Rich Client Components)** 如PrimeFaces、IceFaces等库为JSF提供了更丰富的用户体验,它们扩展了JSF的基本组件集,提供了许多交互性和视觉效果良好的控件。 总的来说,JSF中文帮助文档涵盖...
7. **PhaseListener**: 可以监听JSF生命周期的各个阶段,进行自定义处理。 **JSF生命周期** JSF组件的生命周期分为6个阶段: 1. **恢复视图**: JSF从服务器缓存中恢复已渲染的视图。 2. **应用请求值**: 将请求...
5. **事件处理**:JSF中的`PhaseListener`或`FacesContext`的生命周期方法可能被用来在特定阶段执行额外的验证。 通过分析和学习这些源代码,开发者可以更好地掌握JSF验证机制的内部工作原理,从而在自己的项目中...
7. **PhaseListener**: 允许在JSF生命周期的不同阶段插入自定义逻辑,对处理过程进行监控和修改。 8. **NavigationHandler**: 控制页面导航,根据动作结果决定跳转到哪个页面。 9. **ExpressionLanguage (EL)**: ...
在JSF框架中,此模式用于动态创建对象,比如在生命周期管理中,LifeCycle接口的实现可能会根据配置使用不同的工厂方法来创建PhaseListener对象,这提供了更大的灵活性和可扩展性。 4. **State模式**: State模式...
在JavaServer Faces (JSF) 2.0中,自定义组件是开发人员扩展框架功能的关键方式。通过创建自定义组件,你可以构建符合特定需求的用户界面元素,这些元素可以复用并集成到多个JSF应用程序中。本教程将深入探讨如何在...
2. **创建JSF页面**:使用`.xhtml`扩展名创建一个JSF页面。例如,`HelloWorld.xhtml`,并在其中编写如下代码: ```html <!DOCTYPE html> xmlns:h="http://xmlns.jcp.org/jsf/html"> <title>Hello World ...
11. **JSF框架扩展**:如MyFaces、Mojarra等实现的区别和选择,以及第三方库如PrimeFaces、ICEfaces等的使用。 12. **错误处理和调试**:学习如何处理JSF应用中出现的常见问题,以及调试技巧。 13. **JSF与MVC模式...
此外,通过提供自定义的PhaseListener,开发者可以扩展JSF的生命周期。 6. **依赖注入**:JSF与Java EE的其他组件,如EJB、CDI(Contexts and Dependency Injection)等很好地集成,使得依赖注入变得简单。 7. **...
源码中可以看到,UIComponent 包含属性、事件和渲染逻辑,这使得组件可以自定义和扩展。 - `UIViewRoot` 是页面的顶级组件,管理着页面上的所有子组件。 - `UIInput` 和 `UIOutput` 分别代表输入和输出组件,如...
这涉及到日志记录、异常处理机制,以及使用JSF提供的工具如`PhaseListener`进行调试。 9. **安全性考虑**:在使用JSF和Ajax开发Web应用时,必须考虑到安全性问题,如防止XSS(跨站脚本攻击)、CSRF(跨站请求伪造)...
4. 观察者模式:在事件驱动的系统中,如Servlet监听器或者JSF的PhaseListener,观察者模式用于实现对象间的通信。 5. 装饰器模式:在J2EE中,装饰器模式常用于动态地给对象添加新的行为或责任,例如...
5. **观察者模式**:在事件驱动的Java Web应用中,观察者模式常用于实现事件监听和发布机制,例如Servlet监听器、JSF的PhaseListener等。 6. **适配器模式**:不同技术栈之间的接口不兼容时,适配器模式可以帮助...
- **PhaseListener**: 是一个类,它注册在JSF生命周期中,可以在特定的JSF阶段开始和结束时被通知。这对于实现复杂的逻辑非常有用,比如在提交表单之前验证用户输入。 - **JSF组件与Web ADF控件**: 这两个术语通常...
例如,JSF提供了`PhaseListener`和`FacesContext`事件,允许在请求处理的不同阶段进行干预。 9. **EJB(Enterprise JavaBeans)中的事件**:EJB组件可以通过企业级事件(Enterprise Events)进行通信。一个EJB可以...