2012-10-18 28 views
0

访问我的合成成分的这样的属性:访问复合组件在JSF属性在底层的Java

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); 
} 

这适用于列表(评论),但不能用于字符串(CurrentUserUsername),当我通过用户名是这样的:

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

但是当我通过这种方式:

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

它的工作。

我不想任何人谁将会使用我的组件都将字符串作为EL ...

是否有解决方案,所以我可以在传递字符串作为第一个片段?

+0

你有委派'StateHelper#认沽()'属性setter方法? – BalusC

回答

0

我发现了一个workarround,但我不认为我应该做的是这样..:

@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; 
}