To je zajimave, protoze tento postup jsem zkousel jako prvni (viz. muj
orig. prispevek) a nefungoval, dostaval jsem defaultni stranku s vypisem
chyby (jako by errorpage.jsf neexistovala). Jake mate presne verze JSF,
kde to provozujete?
Mirek
Jaroslav Hurdes napsal(a):
U nas to resime jednotne, a to tak, ze vsude vyhazujeme vyjimku
FacesException (i v akcich) a ve web.xml mame pridano
<error-page>
<error-code>500</error-code>
<location>/common/errorView.jsf</location>
</error-page>
Toto nam zajisti, ze chyba projde do nasi errorView a chybu zobrazime
podle nasi predstavy. V zasade by to melo fungovat s jakoukoli
RuntimeException.
Jaroslav Hurdes
Mirek Stohr wrote:
Odpovidam si sam (po delsim trapeni Google):
viz.:
http://forum.java.sun.com/thread.jspa?forumID=427&threadID=481177
http://forum.java.sun.com/thread.jspa?threadID=510112&messageID=4283555
Pokud jsem to dobre pochopil, tak situace se ma tak, ze pokud jde o
chybu uvnitr action metody nejakeho jsf managed beanu, je treba ji
resit tam, tj. mit neco jako
public String doMyAction(){
try{
// neco provadim
} catch(MyException ex){
// zpracovavam ocekavany vyjimecny stav
} catch(Exception ex){
return "error";
}
}
a ve faces-config.xml mit direktivu
<navigation-rule>
<navigation-case>
<from-outcome>error</from-outcome>
<to-view-id>/errorpage.faces</to-view-id>
</navigation-case>
</navigation-rule>
Pokud ale dojde k vyhozeni exception uvnitr get/set metody, uvnitr
konstruktoru, atd., je situace otevrena a vypada to ze tvurci
specifikace JSF na to jaksi pozapomneli, ci patricna cast JSF
specifikace je silne nejasna a nikdo tomu nerozumi (diskuze vedou vzdy
do ztracena, tj. neni nabidnuto zadne rozumne obecne fungujici reseni).
Toz tak. Snad je to nekomu napomocne. Jak to resite vy?
Mirek
Mirek Stohr napsal(a):
Vazeni kolegove,
zkusil jsem si na web aplikaci (EJB3, JSF 1.2, glassfish app. server)
jak mi beha errorpage, a vysledkem bylo me prekvapeni, ze mi vubec
nebeha, resp. dostanu defaultni errorpage generovanou serverem. Pri
nastavovani jsem postupoval presne podle
http://wiki.apache.org/myfaces/Handling_Server_Errors, tj.
web.xml:
<error-page>
<error-code>500</error-code>
<location>/errorpage.faces</location>
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/errorpage.faces</location>
</error-page>
errorpage.faces:
<f:view>
<f:verbatim><h1>Interní chyba</h1></f:verbatim>
<f:verbatim>
V systému aplikace došlo k interní chybě. Prosím, upozorněte
mě. Děkuji.
</f:verbatim>
<f:verbatim><h4>Chybové hlášení</h4></f:verbatim>
<h:outputText value="#{errorBean.errorMessage}" />
</f:view>
Kde by mohla byt chyba, resp. jak se pro vyse uvedenou spec. lisi
nastaveni errorpage pro zobrazovani internich chyb aplikace? Doposud
jsem naivne myslel ze nijak. Diky.
Mirek