我以这种方式访问我的复合组件的属性:
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 ...
是否有解决方案以便我可以像第一个代码段一样传入字符串?
答案 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;
}