`
hunte
  • 浏览: 12654 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

破解JDeveloper 10g使用ADF框架时jsp/jspx文件可视化编辑器丢失所见即所得功能的难题

阅读更多

用JDev进行JSF开发的朋友可能都遇到过这样一个问题:原来可以正常使用的所见即所得的jspx/jsp编辑器突然不再工作,显示了一张当前页面的元素树的列表,就象下面的这样:

 

怎么回事呢?这还得从JDEV 10g对编辑页面的渲染说起。根据我从网上查到的资料来看,JDEV渲染JSF页面时,由于某些原因并不直接解析jsp/jspx页面源码,而是通过一个内置的web环境来动态执行和显示的,即JDEV全读取web.xml、faces-config.xml等配置文件,并根据这些配置文件中的信息来渲染页面内容并显示在编辑器内。

换句话说,导致上述问题的原因是修改了项目的web.xml或faces-config.xml,在里面添加了部分内容,从而导致JDEV无法正常渲染页面。

 但有些内容是必须添加的,如进行权限判断的filter。怎么办?在开发过程中把添加的内容屏蔽掉是一个办法,但在程序发布的时候还得恢复。有没有其它的办法呢?当然有!

根据JDEV页面渲染的原理,我们可以在添加的filter、JSF listener等程序中对运行环境进行判断。如果当前是真正的web运行,就正常执行,否则就实现短路。怎么进行运行环境判断呢?参考从网上找到的信息,可以通过HttpServletRequest的getServerPort方法。在真正的web环境中,这个方法返回的值肯定大于0(TCP/IP的端口是从1到65535的),而在模拟环境中这个值应该是-1,即小于0。下面以一个Filter为例子:

java 代码
  1. import javax.servlet.Filter;   
  2. import javax.servlet.FilterConfig;   
  3. import javax.servlet.ServletException;   
  4. import javax.servlet.ServletRequest;   
  5. import javax.servlet.ServletResponse;   
  6. import javax.servlet.FilterChain;   
  7.   
  8. import java.io.IOException;   
  9.   
  10. import javax.servlet.http.HttpServletRequest;   
  11. import javax.servlet.http.HttpSession;   
  12. import javax.servlet.http.HttpServletResponse;   
  13.   
  14. import org.apache.log4j.Logger;   
  15.   
  16. public class SecurityFilter implements Filter {   
  17.   
  18.   
  19.     private Logger logger = Logger.getLogger(this.getClass());   
  20.     public void init(FilterConfig filterConfig) throws ServletException {   
  21.         logger.info("SecurityFilter initialized");   
  22.     }   
  23.   
  24.     public void doFilter(ServletRequest request, ServletResponse response,    
  25.                          FilterChain chain) throws IOException,    
  26.                                                    ServletException {   
  27.         /*  
  28.          *   
  29.          * Due to Oracle JDev 10.1.3.x's limitation, we must test the environment that   
  30.          * filter runs in. Otherwise,JDeveloper: ADF Faces Editor Shows in Outline View, not WYSIWYG  
  31.          * See also below page for more information:  
  32.          * http://www.orablogs.com/fnimphius/archives/001822.html  
  33.          * http://forums.oracle.com/forums/thread.jspa?messageID=1752303?  
  34.          *   
  35.          * @date 2007-06-06  
  36.          */  
  37.   
  38.         if (request.getServerPort() < 0)    
  39.         {   
  40.           chain.doFilter(request, response);   
  41.           return;   
  42.         }   
  43.   
  44.         HttpServletRequest req = (HttpServletRequest)request;   
  45.         HttpServletResponse res = (HttpServletResponse)response;   
  46.         HttpSession session = req.getSession(true);   
  47.            
  48.         String contextpath = req.getContextPath();   
  49.         String http = req.getRequestURI();   
  50.         String id = (String)session.getAttribute("loginId");   
  51.         if (http.equals(contextpath + "/faces/login.jspx")) {   
  52.             chain.doFilter(request, response);   
  53.         } else if ((id == null || "".equals(id)) && (http.endsWith(".jspx"))) {   
  54.             res.sendRedirect(contextpath + "/faces/login.jspx");   
  55.         } else {   
  56.             chain.doFilter(request, response);   
  57.         }   
  58.     }   
  59.   
  60.     public void destroy() {   
  61.         logger.info("SecurityFilter destroied");   
  62.     }   
  63.   
  64. }   
  65.   

对于JSF的Listener,根据实际情况的不同,需要将上面的逻辑添加到beforePhase或afterPhase方法中。

另外,如果是因修改web.xml引起,还得注意加入的元素在web.xml中的位置,比如加入了一个新的Filter,那么这个与这个Filter对应的filter-mapping定义应在adfFilter的定义下面。举例如下:

 

 

相信通过这个办法能够解决JDEVELOPER 10G在编辑JSP/JSPX页面方面的所见即所得功能缺失的问题。还要说明的是,ORACLE公司JDEVELOPER开发团队已经注意到这个问题,并许诺在下个主要版本即11G中予以解决。

参考:http://www.orablogs.com/fnimphius/archives/001822.html

  • 大小: 23.2 KB
  • 大小: 63.5 KB
分享到:
评论

相关推荐

    Oracle ADF JDeveloper10g应用到11g迁移(中英文对照)

    1. **版本差异**:Oracle ADF 11g引入了新的功能和改进,如增强的数据可视化、更好的用户体验和性能优化。这可能导致10g中的某些代码和配置不再适用,需要进行相应的更新和调整。 2. **UI组件升级**:ADF 11g提供了...

    Oracle Jdeveloper 10g教程

    Oracle JDeveloper 10g是一款强大的集成开发环境(IDE),专为构建Java应用程序和Web服务而设计,尤其在Oracle应用服务器上表现卓越。这个工具集成了设计、编码、调试、测试和部署等整个开发过程,使得开发人员可以...

    Oracle JDeveloper ADF 框架实例

    Oracle JDeveloper ADF 框架实例是一个基于 Java 的 SOA 应用程序和用户界面的开发框架,通过提供现成的基础架构服务以及可视的、声明式开发功能简化 Java EE 程序开发的复杂性。 TITLE: Oracle JDeveloper ADF ...

    JDeveloper 11g Overview

    - **可视化布局编辑器**: 如 JSF/JSP/Swing 布局编辑器,使得界面设计更为直观。 - **页面流**: 提供可视化 JSF/Struts 页面流设计,简化 Web 应用程序的结构组织。 - **声明式开发**: 包括 JPA/EJB、Web 服务等...

    JDeveloper 10g Tutorial

    《JDeveloper 10g教程》是一份详尽的指南,旨在帮助开发人员掌握Oracle Application Development Framework(简称ADF)在JDeveloper 10g环境下的应用。这份文档由Oracle公司于2006年9月发布,版权归属于Oracle,包含...

    Oracle Jdeveloper 10g开发手册

    Oracle JDeveloper 10g是一款强大的集成开发环境(IDE),专为构建Java应用程序和Web应用程序设计,特别是针对Oracle技术栈。这款工具集成了多种功能,包括代码编辑、调试、性能分析、版本控制以及应用程序服务器的...

    ORACLE英文版学习资料 JDeveloper和ADF 11g新文档集 oracle-11g-english

    在JDeveloper中,开发者可以享受到代码编辑、版本控制、项目管理、调试器以及可视化设计工具等众多功能,极大地提高了开发效率。 ADF是Oracle提供的基于Java EE的开发框架,它简化了企业级应用的开发流程。ADF的...

    Oracle_JDeveloper_11g_ADF_Sample学习啦

    本教程将指导您如何使用Oracle JDeveloper 11g Version 11.1.1.2.0及ADF框架构建一个与数据库交互的富互联网应用(RIA)。在此过程中,您将学习到以下知识点: 1. **创建一个新的Fusion应用和业务组件**:首先需要...

    adf JDeveloper 相关文档

    1. **Web 应用设计**: 使用 ADF 构建 Web 应用时,首先需要明确应用的设计目标和功能需求。这包括确定应用程序的数据模型、用户界面布局以及业务逻辑处理方式等。 2. **集成与部署**: ADF 支持与 Oracle Fusion ...

    Oralce jdeveloper ADF开发例子

    JDeveloper 11g是Oracle在2009年发布的一个版本,它支持ADF的早期版本,提供了一整套工具来支持ADF的模型、视图和控制器(MVC)开发模式。 ADF的核心组成部分包括: 1. **ADF Business Components**:这是数据访问...

    oracle jdeveloper 11g 教程

    Oracle JDeveloper 11g 是一个强大的集成开发环境(IDE),专为构建Java应用程序和Oracle融合中间件解决方案而设计。本教程将引导你了解JDeveloper 11g 11.1.1.2.0的主要组件,并教你如何利用它们创建一个基本的Java...

    Oracle XML Publisher与JDeveloper 10g集成

    将Oracle XML Publisher与JDeveloper 10g集成,可以充分利用两者的优势,为开发人员提供一个高效的工作流程,用于设计、开发和部署复杂的业务报告。 集成过程主要包括以下几个关键步骤: 1. **安装和配置**:首先...

    JDeveloper ADF自动生成行号

    在Oracle JDeveloper ADF(Application Development Framework)中,自动生成行号是开发数据展示界面时一个常见的需求。这个功能使得用户能清晰地看到表格中的每一行数据,特别是在处理大量数据时,行号可以帮助用户...

    oracle jdeveloper 11g 资源国际化

    总之,Oracle JDeveloper 11g的资源国际化功能为开发者提供了一整套工具和框架,使得构建多语言应用变得更加简单和高效。通过理解并熟练运用这些特性,开发者可以创建出真正全球化的产品,满足世界各地用户的需求。

    JDeveloper_11g中文视屏

    JDeveloper 11g包含一个直观的可视化界面设计器,允许开发者通过拖放方式构建用户界面。它支持ADF Faces组件库,提供丰富的UI组件,如表格、图表、按钮等,可以快速创建美观且响应式的用户界面。 **7. 部署与测试**...

    JAVA JDEVELOPER ADF 常用资料的地址

    Java JDeveloper ADF(Application Development Framework)是Oracle提供的一套强大的应用开发工具和技术框架,主要用于构建企业级Java应用程序。ADF结合了JDeveloper IDE,提供了一整套从设计到部署的解决方案。...

    Oracle JDeveloper 10g免费开放给开发者.pdf

    Oracle JDeveloper 10g支持JavaServer Faces (JSF),一个用于构建企业级Java应用程序用户界面的Web应用框架,极大地简化了开发过程。 Oracle JDeveloper 10g的主要特性包括: 1. **集成开发环境**:它提供了一个...

    Oracle JDeveloper 和Oracle ADF 概述.pdf

    ### Oracle JDeveloper 和 Oracle ADF 概述 #### Oracle JDeveloper — 企业级集成开发环境 (IDE) **Oracle JDeveloper** 是一款强大的企业级集成开发环境,专为开发者设计,旨在帮助他们创建复杂的 Java 应用程序...

    oracle adf JDeveloper 教程 java j2ee

    ### Oracle ADF与JDeveloper教程:Java与J2EE开发指南 #### 一、Oracle Application Development Framework (ADF)概述 Oracle Application Development Framework (ADF) 是一个全面的企业级应用开发框架,用于简化...

    上传文件-基于jdeveloper

    10. **错误处理**:良好的错误处理机制也是不可或缺的,确保在文件上传过程中遇到问题时,能够给用户提供清晰的反馈。 通过以上步骤,我们可以在JDeveloper中实现一个完整的文件上传功能。无论是简单的文件上传还是...

Global site tag (gtag.js) - Google Analytics