在支持Java类中访问JSF中的复合组件属性

时间:2012-10-18 14:40:51

标签: java jsf jsf-2 el composite-component

我以这种方式访问​​我的复合组件的属性:

enum PropertyKeys {comments, currentUserUsername}

@SuppressWarnings("unchecked")
private <T> T getAttribute(PropertyKeys propertyKey){
    return (T) getStateHelper().eval(propertyKey);
}

private <T> void setAttribute(PropertyKeys propertyKey, T value){
    getStateHelper().put(propertyKey, value);
}

private List<Comment> getComments() {
    return getAttribute(PropertyKeys.comments);
}

private String getCurrentUserUsername() {
    return getAttribute(PropertyKeys.currentUserUsername);
}

当我以这种方式传递用户名时,这适用于列表(注释)但不适用于String(CurrentUserUsername):

<tr:commentBox comments="#{main.comments}" currentUserUsername="Hans" [...] />

但是当我以这种方式通过时:

<tr:commentBox comments="#{main.comments}" currentUserUsername="#{'Hans'}" [...] />

有效。

我不希望任何使用我的组件的人必须将字符串放入EL ...

是否有解决方案以便我可以像第一个代码段一样传入字符串?

1 个答案:

答案 0 :(得分:0)

我发现了一个工作场所,但我不认为我应该这样做..:

@SuppressWarnings("unchecked")
private <T> T getAttribute(PropertyKeys propertyKey){
    T result = (T) getStateHelper().eval(propertyKey);

    if (result == null) {
        result = (T) this.getAttributes().get(propertyKey + "");
    }

    return result;
}