|
|
|
JSF: инициализация не в конструкторе backing-bean
|
|||
|---|---|---|---|
|
#18+
Доброе утро. Есть JSF-страница и соотв. ей бин. При загрузке страницы нужно подключиться к БД и получить некоторые данные. Пока что делаю это в конструкторе бина. Но, если при получении данных выбрасывается исключение, то я ничего не млгу поделать: сервер выдает браузеру трассу стека, а мне хотелось бы выводить свою страницу с сообщением об ошибке. Нельзя ли еще где-нибудь кроме конструктора проводить инициализацию (имеется в виду перехват каких-либо событий)? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2006, 06:46 |
|
||
|
JSF: инициализация не в конструкторе backing-bean
|
|||
|---|---|---|---|
|
#18+
да, действия в конструкторе всегда череваты тем, что ты рассказываешь. используй Lazy во все getter'ы вставь вызов lazyInit(). типа boolean inited=false; private void lazyInit() { if(!inited) { dosometh... } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2006, 02:20 |
|
||
|
JSF: инициализация не в конструкторе backing-bean
|
|||
|---|---|---|---|
|
#18+
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( ); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2006, 02:39 |
|
||
|
JSF: инициализация не в конструкторе backing-bean
|
|||
|---|---|---|---|
|
#18+
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 попробую разобраться, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2006, 06:28 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=33564431&tid=2150094]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
149ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 248ms |
| total: | 492ms |

| 0 / 0 |
