2012-10-18 67 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; 
}