Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Set property in managed bean, from jsf page 
:(
    Опции темы
PashaOvechkin
Дата 3.6.2007, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 394
Регистрация: 1.4.2007
Где: Riga, Latvia

Репутация: 1
Всего: 4



У меня попятЬ роблема с йсф...

Создан манагед беан 
Код


public class HeaderBacking {
    private String secondLevel = null;
 
           public HeaderBacking(){
        
        secondLevel = new String("--- first---");
     
    }
 
        public void setSecondLevel(String secondLevel) {
        this.secondLevel = secondLevel;
    }
 
    public String getSecondLevel() {
        return secondLevel;
    }
}


 



естЬ  jsp страничка 

Код


   <h:outputText value="#{headerBacking.secondLevel}"/>
    
    <c:set target="headerBacking" scope="request"  property="secondLevel" value="-----yeeee-----"/>
    <h:outputText value="#{headerBacking.secondLevel}"/>




а так же разметка в конфиге faces.xml


Код


<managed-bean>
    <managed-bean-name>headerBacking</managed-bean-name>
    <managed-bean-class>lt.it.webforce.framework.backing.header.HeaderBacking</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>







Когда запускаю страничку, на екране ->

"
--- first---
--- first---
"
Код



Другими словами стандартный JSTL не пашет в ЙСФ.

Так же пробовал в ЙСФ странице написатЬ скриптлет

Код



String a = (String) request.getAttribute("headerBacking");

System.out.println("---" + a)

 

a = null  после етого...


Код




String a = (String) request.getAttribute("headerBacking");

System.out.println("---" + a)

 


а если сделатЬ так:

Код



FacesContext fc = FacesContext.getCurrentInstance();
        HttpServletRequest requestFaces = (HttpServletRequest) fc.getExternalContext().getRequest();
String a = (String) requestFaces.getAttribute("headerBacking");

System.out.println("---" + a)




То получаю верное значение а.

Но сетитЬ атрибут всё равно нелЬзя - беан после етого пересоздаётся и в нём находится то, что укладивает конструктор...

На етот вопрос помоему однозначного ответа нету... Мне никто не помог :-|

Это сообщение отредактировал(а) PashaOvechkin - 3.6.2007, 11:16
PM MAIL Skype   Вверх
Maksym
Дата 4.6.2007, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



Цитата(PashaOvechkin @  3.6.2007,  11:16 Найти цитируемый пост)
На етот вопрос помоему однозначного ответа нету... Мне никто не помог :-|

Это все понятно, а в чем собственно проблема? что нужно сделать?
PM MAIL   Вверх
PashaOvechkin
Дата 4.6.2007, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 394
Регистрация: 1.4.2007
Где: Riga, Latvia

Репутация: 1
Всего: 4



Set  managed bean property, from jsf page.

ЙСТЛ не помогает.
PM MAIL Skype   Вверх
Maksym
Дата 4.6.2007, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



Цитата(PashaOvechkin @  4.6.2007,  12:44 Найти цитируемый пост)
Set  managed bean property, from jsf page.

На самом деле, такая инлайн установка свойства противоречит jsf идеологии, но если очень хочется то можно попробовать использовать inputHidden тэг. Тогда при сабмите формы в bean прийдет нужное значение.
PM MAIL   Вверх
PashaOvechkin
Дата 4.6.2007, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 394
Регистрация: 1.4.2007
Где: Riga, Latvia

Репутация: 1
Всего: 4



Почему же противоречит? 

При загрузке йсп (йсф) странички бин находится в сессии или реквесте...

Что же мне мешает из тела  страницы изменитЬ проперти в нём? 

Другое дело что доступ к любой из scopes в йсф иначе, именно по етму йстл не работает.

Может кто знает как скриптлетом получитЬ бин из сессии например? 

session.getAttribute("");  не подходит.

Как именно хранятся манагед бини не понятно...
PM MAIL Skype   Вверх
Maksym
Дата 4.6.2007, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



PashaOvechkin
Цитата(PashaOvechkin @  4.6.2007,  13:04 Найти цитируемый пост)
Почему же противоречит?

Я имею в виду не технически, а идеологически. Изменение состояния бина из страницы не пользователем (вне логики) нарушает mvc паттерн. Что тебе мешает присвоить свое "-----yeeee-----" внутри метода-обработчика сабмита страницы? идеологически это более верно..
Цитата(PashaOvechkin @  4.6.2007,  13:04 Найти цитируемый пост)
Другое дело что доступ к любой из scopes в йсф иначе, именно по етму йстл не работает.

Может кто знает как скриптлетом получитЬ бин из сессии например? 

session.getAttribute("");  не подходит.

Никогда не пробовал рабоать с сессией напрямую из страницы (хотя участвую в больших проектах на jsf -- в этом просто нет необходимости ;) ), но они хранятся именно в сессии, вот только я не уверен что вутри страницы резервированное session ссылается куда нужно.






Это сообщение отредактировал(а) Maksym - 4.6.2007, 13:19
PM MAIL   Вверх
PashaOvechkin
Дата 4.6.2007, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 394
Регистрация: 1.4.2007
Где: Riga, Latvia

Репутация: 1
Всего: 4



В йсп ссилается куда надо.

В йсф иначе сессия добывается.

Когда получил - смотрю в session1.getAttributesNames();

 - там ничего - куча аттрибутов, но нужного нет 
PM MAIL Skype   Вверх
Maksym
Дата 4.6.2007, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



PashaOvechkin
Если ты проврял атрибуты сессии до первого обращения jsf'ов к этому managed-bean, то его там не будет, jsf создает beans и добавляет их в сессию by demand.
Сессия в принципе одна, по этому я с трудом представляю, чтобы фреймворк ссылался куда-то не туда. В своем посте я имел в виду, что в инлайн скриплете в jsf-странице резервированное имя session может нормально не поддерживаться (хотя не уверен, думаю что здесь все ок, просто в jsf скриплеты не вставляют обычно).
Цитата(PashaOvechkin @  4.6.2007,  13:04 Найти цитируемый пост)
Как именно хранятся манагед бини не понятно... 

Хранит в соответствующем scope, если ты назначил ему сессию, то он будет в сессии. Проверь еще раз, не пытаешся ли ты его там найти до того, как он понадобился jsf (до перехода на страницу, в которой он используется).

PM MAIL   Вверх
PashaOvechkin
Дата 4.6.2007, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 394
Регистрация: 1.4.2007
Где: Riga, Latvia

Репутация: 1
Всего: 4



сессия то одна, в етом сомнений нет - доступ к ней разный... 

Оки, как из скриптлета получитЬ инстанц манагед бина? 

Или например, как в йсф страничке создатЬ локалЬную переменную? 
PM MAIL Skype   Вверх
Maksym
Дата 4.6.2007, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



Цитата(PashaOvechkin @  4.6.2007,  14:36 Найти цитируемый пост)
Оки, как из скриптлета получитЬ инстанц манагед бина? 

Через FacesContext. Объясни подробнее задачу, сдается мне что ее можно решить более прямым способом, чем ручаная модификация managed-bean внутри jsf страницы... они ведь для того и managed-bean, чтоб их jsf мэнэджил, а не программист вручную, где попало..
PM MAIL   Вверх
PashaOvechkin
Дата 4.6.2007, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 394
Регистрация: 1.4.2007
Где: Riga, Latvia

Репутация: 1
Всего: 4



ЕстЬ MenuBacking.java.

Код

<managed-bean>

    <managed-bean-name>menuBacking</managed-bean-name>
    <managed-bean-class>lt.it.webforce.framework.backing.header.MenuBacking</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
 </managed-bean>



В котором естЬ аттрибуты :

String topLevel;
String secondLevel;
String thirdLevel;

Они значат под каким  разделом в меню находится данная страница.

В начале каждой йсф делаю сет етим аттрибутам, позже  include мену.йспх, который смотрит в MenuBacking,  и рисует меню. Так вот. Решение нормалЬное - но реализоватЬ не получается.



Это сообщение отредактировал(а) PashaOvechkin - 4.6.2007, 14:52
PM MAIL Skype   Вверх
Maksym
Дата 4.6.2007, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



PashaOvechkin
Попробуй описать MenuBacking в session scope. Затем создать и добавить его в ручную в сессию при запуске приложения. И обратится в скриплете, как ты делал до этого. Должен найтись.
PM MAIL   Вверх
PashaOvechkin
Дата 4.6.2007, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 394
Регистрация: 1.4.2007
Где: Riga, Latvia

Репутация: 1
Всего: 4



Maksym, спасибо за отзывчивостЬ 

(+)

Наверно нужно как то иначе думатЬ...
Не знаю стопит ли в йсф апликацие, исполЬзоватЬ старие методы...
Может кто нибудЬ делал меню на йсф?

Шепните идею....

Это сообщение отредактировал(а) PashaOvechkin - 4.6.2007, 17:15
PM MAIL Skype   Вверх
Maksym
Дата 4.6.2007, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



Ну, на самом деле, проблема скорее архитектурная. Как я понимаю, ты пытаешься сделать меню хотя бы отдаленно в виде компонента (что в общем правильно) и тебе необходимо его параметризовать, с тем чтобы оно на каждой странице выглядело соответсвенно окружающему контексту.
Решение может быть таким:
MenuBacking сделать уровня сессии и управлять им в коде перехода от страницы к странице. Это работает только в том случае, когда для управления web flow используется какой-нибудь самописный или внешний фреймворк и все переходы подконтрольны разработчику (т.е. нет, например, прямых линков на страницы, все редиректы проходят через методы объектов, отвечающих за управление web-flow), таким образом при переходе меню можно было бы поднастроить не только в зависимости от страницы, но и от прав пользователя, состояния сессии, источника перехода на страницу и т.п. В итоге полный контроль на ситуацией, разделение логики работы ui и собственно его отрисовки. Но для этого, как я говорил, приложение должно быть соответсвующим образом спроектировано: должен быть некоторый объект или набор объектов управляющий flow и в том числе оперирующий MenuBacking и бэкин бинами для других компонент.. и никаких инлайн скриплетов.
Для полной инкапсуляции можно использовать Alias Bean из проекта Tomahawk. Он позволит внутри заинклюденой странички воспользоваться псевдонимом для бэкин бина и реиспользовать ее и бин в любом пространстве имен в этом или других проектах.

В текущем проекте у меня есть меню и реализовано оно примерно таким образом как я описал. Проект большой, поэтому предварительно был написан web flow framework отвечающий за управление компонентами, подобными твоему меню, и заточеный под конкретную предметную область и идею интерфейса (в нашем случае это большое количество визардов, а навигация между ними построена на табуляторах и деревьях).
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.2810 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.