Home   Single Page

コモンダイアログ

XULコンポーネントセットは以下のコモンダイアログをサポートして、いくつかのコモンタスクを簡単にします。

メッセージボックス

org.zkoss.zul.Messagebox クラスはメッセージボックスを表示するユーティリティのセットを提供します。代表的な動作として、エラーが発生した時にユーザーに知らせるか、又は決定をうながすのに使用されます。

if (Messagebox.show("Remove this file?", "Remove?", Messagebox.YES | Messagebox.NO, Messagebox.QUESTION) == Messagebox.YES) {
    ...//remove the file    

}

ユーザーにエラーを知らせるのは一般的ですので、alertと呼ばれるグローバルファンクションがzscriptに追加されました。

alert("Wrong");
Messagebox.show("Wrong");

Messageboxはモーダルウィンドウです。つまり、イベントリスナの中でのみ実行可能という同様の規制を共有しています。
このため、以下のコードは実行されません。詳しくはModal Windows and Event Listeners セクションを参照してください。

<window title="Messagebox not allowed in paging loading">
    <zscript>    
    //failed since show cannot be called in paging loading    
    if (Messagebox.show("Redirect?", "Redirect?",    
    Messagebox.YES | Messagebox.NO, Messagebox.QUESTION) == Messagebox.YES)    
        Executions.sendRedirect("another.zul");        
    </zscript>    
</window>

ファイルアップロードダイアログ

org.zkoss.zul.Fileuploadクラスはクライアントからサーバーへファイルをアップロードするときに使うユーティリティセットを提供します。
getメソッドが呼び出されるとファイルアップロードダイアログはブラウザで表示され、アップロードするファイルを指定することをユーザーに確認します。
ファイルがアップロードされるまで、又は取り消しボタンが押されるまで応答はしません。

<window title="Fileupload Demo" border="normal">
    <image id="image"/>    
    <button label="Upload">    
        <attribute name="onClick">{        
            Object media = Fileupload.get();            
            if (media instanceof org.zkoss.image.Image)            
                image.setContent(media);                
            else if (media != null)            
                Messagebox.show("Not an image: "+media, "Error",                
                    Messagebox.OK, Messagebox.ERROR);                    
        }</attribute>        
    </button>    
</window>

同時多数アップロード

同時に多数のファイルをアップロードすることを可能にする場合、
以下のようにファイルアップロード可能最大個数を指定できます。

<window title="fileupload demo" border="normal">
    <button label="Upload">    
        <attribute name="onClick"><![CDATA[{        
    Object media = Fileupload.get(5);    
    if (media != null)    
        for (int j = 0; j < media.length; ++j) {        
            if (media[j] instanceof org.zkoss.image.Image) {            
                Image image = new Image();                
                image.setContent(media[j]);                
                image.setParent(pics);                
            } else if (media[j] != null) {            
                Messagebox.show("Not an image: "+media[j], "Error",                
                    Messagebox.OK, Messagebox.ERROR);                    
            }            
        }        
        }]]></attribute>        
    </button>    
    <vbox id="pics"/>    
</window>

fileupload コンポーネント

fileuploadコンポーネントはモーダルダイアログではありません。むしろ、一つのコンポーネントです。
他のコンポーネントとともにインラインで配置されます。

【メモ】:ダイアログをアップロードするファイルを開く静的なgetメソッドを提供するのに加えて、
org.zkoss.zul.Fkileupload自身がコンポーネントです。いわゆるfileuploadコンポーネントです。

例えば、

<image id="img"/>
Upload your hot shot:
<fileupload onUpload="img.setContent(event.media)"/>

onUploadイベント

Upload ボタンが押されると、onUploadイベントがorg.zkoss.zk.ui.event.UploadEvent イベントのインスタンスとともに送信されます。getMedia又はgetMediasメソッドを使用してアップロードファイルのコンテンツを取得することができます。

getMediaとgetMediasはn ullを返して、ファイルが指定されていないけれども、アップロードボタンが押されたことを示します。

onCloseイベント

onUploadに加えて、onCloseイベントが送信され、Uploadボタン又は取り消しボタンが押されたことを通知します。
onCloseイベントはデフォルトではfileuploadコンポーネントを無効にします。つまり、すべての領域はクリアされ、再描画されます。

ファイルダウンロードダイアログ

org.zkoss.zul.Filedownloadクラスはサーバーからクライアントにファイルをダウンロードするときに使うユーティリティセットを提供します。
ブラウザウィンドウの中でファイルを表示するiframeコンポーネントとは違い、saveメソッドの一つが呼び出される時、ファイルダウンロードダイアログはブラウザで表示されます。
ユーザーはそれを利用してファイルを保存するディレクトリーを指定します。

<button label="Download download.html">
    <attribute name="onClick">{    
                java.io.InputStream is = desktop.getWebApp().getResourceAsStream("/test/download.html");                
    if (is != null)    
Filedownload.save(is, "text/html", "download.html");
    else    
        alert("/test/download.html not found");        
    }</attribute>    
</button>