破解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 代码
- import?javax.servlet.Filter; ??
- import?javax.servlet.FilterConfig; ??
- import?javax.servlet.ServletException; ??
- import?javax.servlet.ServletRequest; ??
- import?javax.servlet.ServletResponse; ??
- import?javax.servlet.FilterChain; ??
- ??
- import?java.io.IOException; ??
- ??
- import?javax.servlet.http.HttpServletRequest; ??
- import?javax.servlet.http.HttpSession; ??
- import?javax.servlet.http.HttpServletResponse; ??
- ??
- import?org.apache.log4j.Logger; ??
- ??
- public?class?SecurityFilter?implements?Filter?{ ??
- ??
- ??
- ????private?Logger?logger?=?Logger.getLogger(this.getClass()); ??
- ????public?void?init(FilterConfig?filterConfig)?throws?ServletException?{ ??
- ????????logger.info("SecurityFilter?initialized"); ??
- ????} ??
- ??
- ????public?void?doFilter(ServletRequest?request,?ServletResponse?response,? ??
- ?????????????????????????FilterChain?chain)?throws?IOException,? ??
- ???????????????????????????????????????????????????ServletException?{ ??
- ?????????
- ?