![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
nikss |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 13.7.2007 Где: Украина, г.Киев Репутация: 1 Всего: 1 |
Привет!
Столкнулся с такой проблемой: на странице jsp есть компонент <h:panelGrid bind="#{state.menu}" ... > с дочерними компонентами <h:commandLink/>. Во время первой загрузки страницы, в фазе RENDER_RESPONSE, пытаюсь изменить в бине аттрубут "style" дочерних компонентов <h:commandLink/>, но оказывается , что "menu" (в бине, как HtmlPanelGrid) содержит нуль дочерних компонентов. Во всех последующих рендерингах дочерние компоненты присутствуют. Бин state объявлен как session бин в faces-config. Может кто сталкивался с такой ситуацией? Жду помощи! Спасибо. |
|||
|
||||
ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
А почему стили на самой странице не прописать?
PS: Поставьте точки останова на геттер и сеттер поля menu, и увидите как работает биндинг, на каких фазах и т. п. Покажите код и содержимое страницы, если не разберётесь. |
|||
|
||||
nikss |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 13.7.2007 Где: Украина, г.Киев Репутация: 1 Всего: 1 |
ivg, стили прописать на странице можно, но в данном случае у меня отрисовывается текущий элемент меню.
Привожу код: Бин state
Страница header.jsp: <%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <f:loadBundle basename="ua.com.nikss.beans.Resources.messages" var="msgs"/> <head> <script language="javascript" src="/resources/jscript.js"> <LINK href="/resources/styleclass.css" rel="stylesheet" type="text/css"> </head> <f:subview id="header" > <h:form> <center> <h:panelGrid columns="5" cellpadding="4" cellspacing="2" > <h:graphicImage url="/images/logo_nokia.gif"/> <h:outputText value="Пользователь: #{state.user.login}"/> <h:selectOneListbox size="1" onchange="submit()" valueChangeListener="#{state.changeLocale}" value="#{state.locale}"> <f:selectItems value="#{state.locales}"/> </h:selectOneListbox> <h:commandButton action="#{state.logoff}" value="Выйти"/> </h:panelGrid> </center> </h:form> <h:form> <h:panelGrid columns="6" border="0" styleClass="border" binding="#{state.menu}"> <h:commandLink value="Главная" action="#{state.onActionMenu}" actionListener="#{state.onClickMenu}"> <f:attribute name="itemMenu" value="/content/main.jsp"/> </h:commandLink> <h:commandLink value="Журнал тренингов" action="#{state.onActionMenu}" actionListener="#{state.onClickMenu}"> <f:attribute name="itemMenu" value="/content/listOfTrainings.jsp"/> </h:commandLink> <h:commandLink value="Управление тренингами" action="#{state.onActionMenu}" actionListener="#{state.onClickMenu}"> <f:attribute name="itemMenu" value="/content/manageOfTrainings.jsp"/> </h:commandLink> <h:commandLink value="Регистрация нового тренинга" action="#{state.onActionMenu}" actionListener="#{state.onClickMenu}"> <f:attribute name="itemMenu" value="/content/addNewTraining.jsp"/> </h:commandLink> <h:commandLink value="Статус регистрации" action="#{state.onActionMenu}" actionListener="#{state.onClickMenu}"> <f:attribute name="itemMenu" value="/content/statusOfRegistration.jsp"/> </h:commandLink> <h:commandLink value="Администрирование" action="#{state.onActionMenu}" actionListener="#{state.onClickMenu}"> <f:attribute name="itemMenu" value="/content/admin.jsp"/> </h:commandLink> </h:panelGrid> </h:form> </f:subview> Страница main.jsp: <%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <f:view> <jsp:include page="Header.jsp"/> <h:outputText value="Главная"/> </f:view> |
|||
|
||||
Maksym |
|
|||
![]() . ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 24 Всего: 62 |
nikss
jsf инстанциирует managed beans по требованию (on demand), то есть тогда когда они необходимы для генерации ответа. Видимо, в твоем случае menu понадобилось позже. Ты проверял в beforePhase или afterPhase? |
|||
|
||||
nikss |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 13.7.2007 Где: Украина, г.Киев Репутация: 1 Всего: 1 |
Maksym, каким образом это можно проверить?
|
|||
|
||||
Maksym |
|
|||
![]() . ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 24 Всего: 62 |
nikss
я уже сам увидел в твоем коде -- ты вызываешь createMenu(); в beforePhase() PhaseListener'а. Попробуй сделать это в afterPhase(). Правда я не уверен что сработает ![]() |
|||
|
||||
ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
Цитата из JSF Spec, правда для 1.1:
Как я понимаю, всё дело в механизме этого самого биндинга. Попробуйте, на всякий случай, обнулить поле menu в 3 строке бина. |
|||
|
||||
nikss |
|
||||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 13.7.2007 Где: Украина, г.Киев Репутация: 1 Всего: 1 |
В общем, все перепробовал! Объявлял и так
и так
в конечном счете все равно приходим к нулевому значению дочерних элементов. пытался сделать это в методе afterPhase() - возвращает правильное количество дочерних элементов, но в этой фазе я немогу ничего сделать, так как мои изменения не будут применены. Понемногу начинаю разочаровываться в JSF. :( Это сообщение отредактировал(а) nikss - 30.3.2008, 16:17 |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |