"分页栏出现3个问号BUG解决"

2013-06-06(Thursday) 00:00

平台:Jdeveloper 11.1.1.7.0


BUG描述 标准控件af:table,“页”字前后出现三个问号。

原因分析

查看LOG文件
{% codeblock lang:java %} 无法从外观 mySkin.desktop 获取资源关键字 页

可见是RenderingContext类中getTranslatedString方法发生异常。
查看源代码分析:

找到源代码所在位置

将JAR包解压得到RenderingContext类,反编译查看

结果如下RenderingContext.class
{% codeblock lang:java %} public String getTranslatedString(String key) { if (key == null) return null; try { return getSkin().getTranslatedString(getLocaleContext(), key); } catch (MissingResourceException mre) { _LOG.severe("CANNOT_GET_RESOURCE_KEY", new String[] { key, getSkin().getId() }); } return "???" + key + "???"; }

可知在调用getTranslatedString获取Resource时,发生MissingResourceException异常所以返回了带"???"+Key+"???"字样的字符串。

解决方案:

根据以上分析基本可知出现问号的原因是在获取resourcebundle时,找不到Key为页的resource,所以直接返回了"???" + key + "???",就出现分页显示出现问号的BUG。

方案一:重写ResourceBundle类,增加KEY值为“页”的资源。 步骤如下:

  • 创建SkinBundle类 extends ListResourceBundle
    {% codeblock lang:java %} package cn.dengdezhao.bundle public class SkinBundle extends ListResourceBundle { @Override public Object[][] getContents() { System.out.println("executing..."); return new Object[][]{ { "页", "页" } }; } }

  • 创建trinidad-skins.xml文件注册定制化Skin
    {% codeblock lang:xml %} <?xml version="1.0" encoding="UTF-8"?> mySkin.desktop mySkin skyros-v1.desktop org.apache.myfaces.trinidad.desktop css/mySkin.css cn.dengdezhao.bundle.SkinBundle

  • 修改trinidad-config.xml文件如下:
    {% codeblock lang:xml %} <?xml version="1.0" encoding="UTF-8"?> mySkin

  • 创建css/mySkin.css文件(内容默认CSS即可)

运行即发现问号消失。

方案二:其实原理跟方案一一样,也是通过改resourcebundle实现。resourcebundle支持三种类型,一种是以上的扩展ListResourceBundle类实现,一种是通过配置文件properties实现,另外一种是xliff实现。也可创建一个ApplicationBundle.properties文件,内容如下:
{% codeblock lang:java %} 页 = 页

trinidad-skins.xml里的bundle-name节点设置成ApplicationBundle也可实现同样效果。

定制CSS可参照["定制CSS"]

Category: ADF Tagged: ADF