Oracle ADF:SkinFactory在JDeveloper 12.1.3中无法正常工作

时间:2015-03-13 15:17:06

标签: java jsf oracle-adf jdeveloper trinidad

我使用下面的代码填充我的皮肤列表,并为用户提供在运行时更改皮肤的可能性。

public List getSkinChoices() {
    List choices = new ArrayList();
    String skinFamily = null;
    String skinLabel = null;
    SkinFactory sf = SkinFactory.getFactory();
    FacesContext context = FacesContext.getCurrentInstance();
    for (Iterator i = sf.getSkinIds(); i.hasNext();) {
        String skinID = (String) i.next();
        Skin skin = sf.getSkin(context, skinID);
        skinFamily = skin.getFamily();
        skinLabel = skinFamily;
        if (skin.getRenderKitId().indexOf("desktop") > 0 ) {
            choices.add(new SelectItem(skinFamily, skinLabel));
        }
    }
    return choices;
}

现在我正在使用Jdev 12.1.3,不推荐使用方法sf.getSkinIds();。 该方法不再像通常那样加载所有皮肤 enter image description here

有人可以指导我采用新的实施方式吗? 是否有任何替代方案可以获得所有可用的皮肤?

注意:关于在Jdev 12.1.2中加载所有可用皮肤的代码。
感谢

1 个答案:

答案 0 :(得分:2)

SkinFactory类是Trinidad API的一部分,根据其javadoc,您必须:

  

使用SkinProvider#getSkinMetadata()获取支持的皮肤列表。

所以,你必须做这样的事情:

Collection<SkinMetadata> supportedSkins = SkinProvider.getSkinMetadata(context);
Iterator<SkinMetadata> iterator = supportedSkins.iterator();
while (iterator.hasNext()) {
    SkinMetadata next = iterator.next();
    skinFamily = next.getFamily();
    //etc.
}