powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JSF: инициализация не в конструкторе backing-bean
4 сообщений из 4, страница 1 из 1
JSF: инициализация не в конструкторе backing-bean
    #33563297
artgonch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе утро.
Есть JSF-страница и соотв. ей бин. При загрузке страницы нужно подключиться к БД и получить некоторые данные. Пока что делаю это в конструкторе бина. Но, если при получении данных выбрасывается исключение, то я ничего не млгу поделать: сервер выдает браузеру трассу стека, а мне хотелось бы выводить свою страницу с сообщением об ошибке. Нельзя ли еще где-нибудь кроме конструктора проводить инициализацию (имеется в виду перехват каких-либо событий)?
Спасибо.
...
Рейтинг: 0 / 0
JSF: инициализация не в конструкторе backing-bean
    #33564422
ppex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, действия в конструкторе всегда череваты
тем, что ты рассказываешь.

используй Lazy во все getter'ы вставь вызов
lazyInit(). типа

boolean inited=false;
private void lazyInit()
{
if(!inited)
{ dosometh...
}
}
...
Рейтинг: 0 / 0
JSF: инициализация не в конструкторе backing-bean
    #33564431
ppex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
12.5 Using a PhaseListener
There's an event type we haven't talked about so far, namely the javax.faces.event.PhaseEvent. This is an event that fires before and after each request processing lifecycle phase, invoking all javax.faces.event.PhaseListener instances registered with the javax.faces.lifecycle.Lifecycle infrastructure object responsible for coordinating the request processing.
A very simple application probably doesn't have any use for this event, but it can come in handy in some scenarios. For instance, say that your application relies on an external resource (such as a database). Instead of dealing with the (hopefully rare) situation that the database is unavailable in all component event handlers, you can use a PhaseListener that checks the resource status and navigates to an error page if it's not available. Here's an outline for such a listener:

package com.mycompany.event;
....
public class CheckResourceListener implements PhaseListener {
public PhaseId getPhaseId( ) {
return PhaseId.RESTORE_VIEW;
}
public void beforePhase(PhaseEvent event) { }
public void afterPhase(PhaseEvent event) {
FacesContext context = event.getFacesContext( );
if (!isEverythingOkay(context)) {
NavigationHandler nh =
context.getApplication( ).getNavigationHandler( );
nh.handleNavigation(context, null, "unavailable");
}
}
private boolean isEverythingOkay(FacesContext context) {
...
return result;
}
}

faces-config.xml :
<navigation-rule> <navigation-case>
<from-outcome>unavailable</from-outcome><to-view-id>/unavailable.jsp</to-view-id>
<redirect/>
</navigation-case> </navigation-rule>
<lifecycle>
<phase-listener> com.mycompany.event.CheckResourceListener </phase-listener>
</lifecycle>


можно так попробовать
FacesContext context = FacesContext.getCurrentInstance( );
ExternalContext ec = context.getExternalContext( );
try {
ec.redirect("http://www.amazon.com/exec/obidos/ASIN/0596005393");
}
catch (IOException ioe) {
return "failure";
}
context.responseComplete( );
...
Рейтинг: 0 / 0
JSF: инициализация не в конструкторе backing-bean
    #33564465
artgonch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ppex
можно так попробовать
FacesContext context = FacesContext.getCurrentInstance( );
ExternalContext ec = context.getExternalContext( );
try {
ec.redirect("http://www.amazon.com/exec/obidos/ASIN/0596005393");
}
catch (IOException ioe) {
return "failure";
}
context.responseComplete( );

Так и пробовал, но в конструкторе не помогает. Все равно выбрасывается исклбючение.

С PhaseListener попробую разобраться, спасибо.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JSF: инициализация не в конструкторе backing-bean
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]