Home   Single Page

ページ読み込み中のエラー処理

ZUMLページ読み込み中に処理できない例外が起こった場合、ウェブサーバーによって、直接処理されます。
つまり、JSPといったほかのページを処理するのと何も変わりません。

デフォルトでは、ウェブサーバーはエラーメッセージとそのトレースを表示します。

以下のようにINF/web.xmlの中でエラーページを指定することで、エラー処理をカスタマイズできます。より詳しくはJava Servlet Specificaiton を参照ください。

<!-- web.xml -->
<error-page>
    <exception-type>java.lang.Throwable</exception-type>    
    <location>/WEB-INF/sys/error.zul</location>    
</error-page>

ページ読み込み中にエラーが発生したら、ウェブサーバーはプログラマーが指定したエラーページ/error/error.zulに転送します。
転送するときに、ウェブサーバーはリクエスト属性を送信し、何が起こったかを表示します。属性は以下のようです。

Request Attribute

Type

javax.servlet.error.status_code

java.lang.Integer

javax.servlet.error.exception_type

java.lang.Class

javax.servlet.error.message

java.lang.String

javax.servlet.error.exception

java.lang.Throwable

javax.servlet.error.request_uri

java.lang.String

javax.servlet.error.servlet_name

java.lang.String

これらの属性を使用して、エラーページをカスタマイズすることができます。例えば、

<window title="Error ${requestScope['javax.servlet.error.status_code']}">
    Cause: ${requestScope['javax.servlet.error.message']}    
</window>

【ヒント】:エラーページはどんなサーブレットにでもなることができます。ZULのほかに、JSPまたは他のお好みのものを何でも使用できます。

【ヒント】:転送した後、エラーページは主なページとして表示されます。つまり、プログラマーはモーダルを指定したり、メインウィンドウにオーバーラップさせたりする必要はありません。

ZK Mobileのエラー処理

サーブレット2.x (web.xml)はデバイスタイプというコンセプトを持っていません。
このため、Ajax用ブラウザとモバイルデバイスを同じサーバー上で使用するには、ページを転送しなければなりません。
これはひとつの例です。

//error.zul
<zk>
    <zscript>    
    if (Executions.getCurrent().isMilDevice())    
        Executions.forward("error.mil");        
    </zscript>    
    <window>    
    ....error message in ZUL    
    </window>    
</zk>