Home   Single Page

ページ更新中のエラー処理

ZUMLページ(aka.,イベントリスナ実行中)を更新しているとき、例外が発生した場合、その例外はZKアップデートエンジンによって処理されます。
デフォルトでは、ただ単純に警告ボックスを表示して、ユーザーに警告します。

以下のように、WEB-INF/zk.xmlの中でエラーページを指定することで、エラー処理をカスタマイズできます。より詳しくは開発用リファレンス中のAppendix Bを参照してください。

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

イベントリスナの中でエラーが発生したら、ZKアップデートエンジンはプログラマーが指定したエラーページ,/error/error.zulで、ダイアログを作成します。

ZUMLページを読み込み中のエラー処理のように、一つ以上の<error-page>要素を指定できます。
そのどれも異なった例外のタイプ(<exception-type>要素の値)に関連しています。
エラーが発生したとき、ZKは対応する例外タイプが見つかるまで、エラーページを一つ一つ探します。

さらに、ZKはリクエスト属性のセットをエラーページに送信して、何が起こったかを表示します。これらの属性は以下のようです。

Request Attribute

Type

javax.servlet.error.exception_type

java.lang.Class

javax.servlet.error.message

java.lang.String

javax.servlet.error.exception

java.lang.Throwable

以下はエラーページの一つの例です。

<window title="Error ${requestScope['javax.servlet.error.status_code']}"
width="400px" border="normal" mode="modal">
    <vbox>    
KillerApp encounters a fatal error, ${requestScope['javax.servlet.error.message']}. The error is recorded and we will look at it and fix it soon.
        <hbox style="margin-left:auto; margin-right:auto">        
            <button label="Continue" onClick="spaceOwner.detach()"/>            
            <button label="Reload" onClick="Executions.sendRedirect(null)"/>            
        </hbox>        
    </vbox>    
    <zscript>    
    org.zkoss.util.logging.Log.lookup("Fatal").log(    
        requestScope.get("javax.servlet.error.exception"));        
    </zscript>    
</window>

【ヒント】:エラーページはエラーを起こした同一デスクトップで作成されます。つまり、そこから、関連した情報を取得できます。

【ヒント】:まったくモーダルを使用しないアプリケーションがあるため、バージョン2.3.1以降、ZKは自動的にモーダルとしてルートウィンドウを作成しません。モーダルを使用する場合は、前の例をご参照ください。

ページ更新中のZKモバイルのエラー

どのデバイスタイプもエラーページのセットを持っています。ZKモバイルデバイス(MILをサポートしているモバイルデバイス)にエラーページを指定するには 、以下のように mil をdevice-typeに指定しなければなりません。

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

【ヒント】:devie-type要素が省略された場合、ajaxが想定されます。つまり、Ajaxブラウザにエラーページを指定します。

<device-type>ajax</device-type> <!-- ajax is the default -->