"分页栏出现3个问号BUG解决"
2013-06-06(Thursday) 00:00
平台:Jdeveloper 11.1.1.7.0
BUG描述 标准控件af:table,“页”字前后出现三个问号。
原因分析
查看LOG文件
{% codeblock lang:java %}
可见是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"]