0

複合コンポーネントの属性には、次の方法でアクセスします。

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として文字列を入力する必要があることを望んでいません...

最初のスニペットのように文字列を渡すことができるようにするための解決策はありますか?

4

1 に答える 1

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;
}
于 2012-10-18T16:40:03.450 に答える