Поддерживает ли f: attribute что-то кроме String? - PullRequest
0 голосов
/ 08 июля 2011

У меня есть потребность реализовать ice:commandButton, который передает список своему компоненту поддержки. Я не в области видимости портлета, но в области видимости тегов.

Я знаю, что когда я получаю f:attribute из actionListener, я получаю объект, который должен быть приведен.

Я хочу знать, могу ли я сопоставить атрибут f: с List<MyClass>, где фактический экземпляр списка на самом деле , ArrayList и MyClass - сериализуемый.

Что-то вроде:

MyTag.xhtml

<ice:commandButton actionListener="#{TagBean.doPrintItems}">
    <f:attribute name="collection" value="#{items}" />
</ice:commandButton>
//[other things]

MyPortlet.jspx

<my:printPopup items="#{BackingBean.itemsToPrint}" />

BackingBean.java

class BackingBean {
    private List<MyClass> itemsToPrint;

    //getter and setter of course
}

TagBean.java

class TagBean {
    private List<MyClass> collection;

    //getter and setter of course
    public void doPrint(ActionEvent e) {
        collection = (List<MyClass>) e.getComponent().getAttributes().get("collection");
    }

Как вы думаете, это возможно? Спасибо

1 Ответ

1 голос
/ 11 июля 2011

<f:attribute> дает возможность добавить пользовательские атрибуты компонента.Они будут храниться в состоянии дерева компонентов на стороне сервера.Таким образом, это может быть любой тип объекта Java, который вы хотите.Метод UIComponent#getAttributes() также намекает, что меньше или больше;он возвращает Map<String, Object>, а не Map<String, String>.Я считаю, что ваши сомнения основаны на том факте, что параметры HTTP-запроса могут быть только строками.Но атрибуты компонента не следует путать с параметрами HTTP-запроса.

...