在用JSF 做系统view层时,有两个必须要解决的问题,就是缓存的控制和页面权限的判断,尤其是缓存问题,经常搞的我改了东西看不到效果,然后再找问题在哪,最后没招的时候,清空缓存,一切就ok,真tnnd。所以实现了JSF的PhaseListener接口,所有页面都设为no-cache,牺牲点速度,换取调整的时间,也算值了,反正客户都是在局域网中。
package com.ame.util;
import java.util.Map;
import javax.faces.application.NavigationHandler; import javax.faces.context.FacesContext; import javax.faces.event.PhaseEvent; import javax.faces.event.PhaseId; import javax.faces.event.PhaseListener; import javax.servlet.http.HttpServletResponse;
import com.ame.login.bean.LoginBean; /** * @author LinRuijun * @function JSF login capability judgment and cache-control */ @SuppressWarnings("serial") public class LoginCheck implements PhaseListener {
public PhaseId getPhaseId() { return PhaseId.RESTORE_VIEW; }
public void beforePhase(PhaseEvent phaseEvent) { FacesContext facesContext = phaseEvent.getFacesContext(); HttpServletResponse response = (HttpServletResponse)facesContext.getExternalContext().getResponse(); response.addHeader("Pragma", "no-cache"); response.addHeader("Cache-Control", "no-cache"); response.addHeader("Cache-Control", "no-store"); response.addHeader("Cache-Control", "must-revalidate"); }
public void afterPhase(PhaseEvent event) { FacesContext fc = event.getFacesContext(); try{ String pageName = fc.getViewRoot().getViewId(); boolean loginPage = false; if(pageName.lastIndexOf("login")>-1){ loginPage = true; } if (!loginPage && !loggedIn()) { NavigationHandler nh = fc.getApplication().getNavigationHandler(); nh.handleNavigation(fc, null, "logout"); }
}catch(Exception e){ e.printStackTrace(System.out); }
} private boolean loggedIn() { Map<String, Object> session = FacesContext.getCurrentInstance().getExternalContext().getSessionMap(); if (session.get("loginBean") != null) { LoginBean login = (LoginBean)(session.get("loginBean")); return login.isLoginFlag(); }else{ return false; } } }
然后在JSF的Faces-config.xml 里配置一下
<faces-config xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd" version="1.2"> <lifecycle> <phase-listener id="showPhaseListener"> com.ame.util.LoginCheck </phase-listener> </lifecycle>
<navigation-rule> <from-view-id>*</from-view-id> <navigation-case> <from-outcome>logout</from-outcome> <to-view-id>/login.jsp</to-view-id> <redirect/> </navigation-case> </navigation-rule> </faces-config>
okay ,一切搞定。
|
相关推荐
7. **优化与性能**:为了提高性能,开发者需要注意正确配置JSF的缓存机制,合理使用Facelets的缓存特性,以及优化Ajax4jsf的请求处理。同时,确保所有必需的jar包版本兼容,避免引入不必要的冲突或冗余。 总之,...
**JSF(JavaServer Faces)...8. **最佳实践**:提供一些开发JSF应用程序时的技巧和建议,如合理使用缓存、优化性能等。 通过这份PPT,开发者可以系统地学习JSF的基础知识和实际应用,进一步提升其在Web开发中的技能。
- **缓存与回退机制**:框架内建了缓存和回退机制,确保在Ajax操作失败时能恢复到之前的页面状态。 ### 3. 使用Ajax4JSF的步骤 - **添加依赖**:在项目中引入Ajax4JSF的JAR文件或通过Maven等构建工具添加依赖。 -...
- **缓存管理**:JSF 1.2改进了视图状态的缓存策略,源代码中可以看到如何配置和优化缓存以提升性能。 - **事件处理**:理解和分析源码中的事件监听器注册和触发机制,有助于编写高效的事件处理逻辑。 - **错误...
在性能优化和调试方面,JSF实战也会提供实用的技巧和建议,如缓存管理、错误处理、性能监控等,帮助开发者构建高效且稳定的JSF应用。 最后,本书可能会包含一些实战项目案例,让读者有机会将所学知识应用于实际场景...
4. **性能优化**:合理使用JSF的缓存机制和Spring的数据缓存,减少不必要的数据库查询。 整合JSF和Spring可以带来高效的开发体验和健壮的应用架构,但同时也需要开发者对两个框架都有深入的理解,才能充分发挥其...
JSF应用的性能可以通过多种方式优化,包括减少视图状态的大小、使用懒加载、正确配置缓存策略以及选择合适的组件库。 10. JSF的未来: 随着JavaEE更名为JakartaEE,JSF也在持续发展。最新的JSF版本(如JSF 3.0)...
JSF 详解 JSF(JavaServer Faces)是一种基于Java技术的Web应用程序框架,用于简化Web应用程序的开发。JSF的核心概念是控件树,以MVC模式为基础,提供了一个灵活的Web应用程序开发框架。 结构 JSF的结构图可以分为...
在使用Ajax4JSF时,需要注意性能优化,如减少不必要的网络请求,合理设计Ajax更新区域,避免全页面刷新,以及使用缓存等策略。同时,良好的代码组织和测试也是必不可少的。 综上所述,"ajax4jsf-demo"项目为学习和...
2. **缓存**:通过EJB的缓存机制,提高数据读取效率。 3. **异步处理**:使用消息驱动bean处理耗时任务,避免阻塞用户界面。 4. **可扩展性**:设计模块化,便于添加新功能或整合其他系统。 综上所述,"EJB JSF开发...
10. **性能优化**:虽然JSF 1.2相对后来的版本可能在性能方面稍显不足,但仍然可以通过合理的缓存策略、减少不必要的请求处理和优化组件使用等方式来提高性能。 综上所述,JSF 1.2作为一个成熟的Java Web框架,提供...
10. **性能优化**:MyFaces提供了一些性能优化选项,如通过设置`org.apache.myfaces.USE_TRANSLATIONS_CACHE`属性启用翻译缓存,或者使用Mojarra的Partial State Saving来减少服务器负载。 总的来说,JSF和MyFaces...
- **性能优化**:这一章节可能涵盖如何减少不必要的请求处理,缓存策略,以及如何利用Partial State Saving来提高JSF应用的性能。 学习JSF的第一步通常是理解这些基础概念,然后通过实践逐步熟悉框架的工作原理。...
手册中会介绍如何利用Ajax4JSF的特性,如缓存和批量更新,来提升性能。此外,还提供了调试工具和日志配置的指导。 ### 10. 示例与实战 手册提供了丰富的示例代码和步骤,帮助读者理解和实践Ajax4JSF。从简单的按钮...
此外,缓存策略和异步加载也是提升分页性能的有效手段。 7. 用户体验: 考虑到用户体验,可以添加诸如“跳转到指定页”、“每页显示条目数可选”等功能。这些可以通过额外的输入框和选择器来实现,配合后端逻辑...
3. **Component Tree缓存**:JSF2引入了组件树缓存,提高了页面渲染性能。这使得在处理多个请求时,可以重用组件树,减少了不必要的计算。 4. **Partial State Saving**:JSF2实现了部分状态保存,只保存发生更改的...
6. **性能优化**:结合JSF的缓存机制和EJB的缓存策略,可以提高系统的响应速度和处理能力。 综上所述,JSF和EJB的结合使用,能够构建出功能强大且结构清晰的企业级应用。开发者可以通过JSF的组件化和声明式编程方式...
9. **性能优化**:在实际应用中,考虑性能和安全性,可以对DWR的缓存策略、异步处理、安全设置等进行调整,确保应用的高效和稳定运行。 通过以上步骤,我们可以成功地在JSF应用中集成DWR,利用其强大的Ajax功能。...
1. **恢复视图**: JSF从服务器缓存中恢复已渲染的视图。 2. **应用请求值**: 将请求参数绑定到组件的属性。 3. **过程验证**: 验证组件的输入数据。 4. **更新模型值**: 如果验证成功,将组件的值更新到模型中。 5. ...
7. **最佳实践和优化**:可能还包括一些提升性能和用户体验的建议,例如缓存管理、错误处理等。 而“VWJSFProject”文件很可能是示例项目,它包含了一个完整的VisualWebJSF应用,供你参考和学习。通过分析和修改这...