Как узнать вызывающий компонент в методе получения? - PullRequest
2 голосов
/ 03 февраля 2012

На моей странице у меня есть 2 (а позже и многие другие) контейнеры с изображениями.Я хочу связать их свойство url, чтобы у каждого контейнера был свой источник в соответствии с его идентификатором.У меня есть что-то вроде этого в моем JSP:

<webuijsf:image id="image2" binding="#{Page1.img_2}" url="#{Page1.imgSRC}" />

В коде бина поддержки у меня есть imgSRC геттер, однако я хочу знать в геттере, из какого компонента он был вызван, иосновываясь на идентификаторе компонента, я буду использовать какое-то switch, чтобы решить, какой URL-адрес необходимо вернуть компоненту.

Возможно ли это вообще?Если да, то как?

1 Ответ

7 голосов
/ 03 февраля 2012

Поскольку вы используете библиотеку компонентов Woodstock, которая была заброшена более 4 лет назад, я готов поспорить, что вы поддерживаете устаревшее приложение JSF 1.x, которое никогда не обновлялось для замены мертвой библиотеки компонентов Woodstock.В JSF 1.x нет API-метода, который позволяет вам получить текущий компонент в геттере.

В JSF 2.x вы могли бы использовать UIComponent#getCurrentComponent() для этого:

public String getImgSRC() {
    UIComponent component = UIComponent.getCurrentComponent(FacesContext.getCurrentInstance());
    // ...
}

Но в JSF 1.x этот метод недоступен.Я бы предложил другой подход.Если единственной целью является исключение стандартного кода свойства / получателя, то вместо этого можно использовать Map для хранения значений.Карты можно рассматривать как Javabeans в EL.

Примерно так:

private static Map<String, String> imageURLs = new HashMap<String, String>();

static {
    imageURLs.put("img1", "foo.png");
    imageURLs.put("img2", "bar.png");
    imageURLs.put("img3", "baz.png");
    // ...
}

public Map<String, String> getImageURLs() {
    return imageURLs;
}

Что можно использовать как:

<webuijsf:image url="#{Page1.imageURLs.img1}" />
<webuijsf:image url="#{Page1.imageURLs.img2}" />
<webuijsf:image url="#{Page1.imageURLs.img3}" />
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...