ADF错误unable to find bundle for:XXX
部署ADF应用时,页面打不开,服务器报以下错误:
java.util.MissingResourceException: unable to find bundle for:LimsContacpOutApplyUIBundle at oracle.javatools.resourcebundle.BundleFactory.getMap(BundleFactory.java:118) at oracle.javatools.resourcebundle.BundleFactory.getMap(BundleFactory.java:55) at oracle.javatools.resourcebundle.BundleVariableResolver$LocaleMap.get(BundleVariableResolver.java:69) at oracle.javatools.resourcebundle.BundleVariableResolver$LocaleMap.get(BundleVariableResolver.java:56) at javax.el.MapELResolver.getValue(MapELResolver.java:164) at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:173) at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:200)
但我确定资源文件LimsContacpOutApplyUIBundle是存在的,而且页面上也正确引用了
<c:set var="limscontacpoutapplyuiBundle" value="#{adfBundle['LimsContacpOutApplyUIBundle']}"/>
JDevelper页面编辑面板上资源文本也可以正常显示,试了各种办法,问题还是没解决,把jsff页面引用资源文件的EL全部删除,在本地可以run得起来,但和别的应用整合起来的时候还是报一样的错误。
另外一个解决方法是:
删掉资源文件,在文本属性上选择资源文件时JDeveloper会自动再创建个资源文件,虽然这样可以运行,但资源文件存放的目录有点奇怪,见截图:
ws.type这两个文件夹不是笔者指定的,看到这就想到,程序应该是到ws.type这个目录下搜索资源文件,还没改之前是没这个目录的,资源文件存放在view目录下,这个目录应该是存在某个配置文件里面,使用JDeveloper的搜索功能(Search->Find in Files),在当前工程搜索ws.type这个关键字,最后在XXXXUI.jpr文件中找到这样一段xml:
<value n="defaultPackage" v="org.lims.contacp.outapply.ws.type"/>
看到这就应该知道,这个是默认目录配置项,笔者所期待的默认目录应该是org.lims.contacp.outapply.view原先的资源文件也是存在该目录下,可能是某些操作将默认目录给改了,而且看对资源文件引用的jsff片段就知道
<c:set var="limscontacpoutapplyuiBundle" value="#{adfBundle['LimsContacpOutApplyUIBundle']}"/>
这里面是没有目录信息的,也就是说程序对该文件的定位肯定是基于某个配置项的,而且上面自动生成ws.type这两个目录就可以推断该目录就是XXXUI.jpr里面的这个
defaultPackage,将defaultPackage的值改成资源文件所在的目录,重新部署应用,错误消失。
这个错误给我们一点经验就是,当服务器找不到某些文件,但我们确定该文件是存在的,这时候我们就应该去.jpr文件里面查看是不是某些默认的配置项给配错了。