0

私はzk6フレームワークの初心者です。あるzulからナビゲートして別のzulにデータをロードしようとしているビューモデルクラスを作成しました:

public class SearchVM {
@Command
@NotifyChange({ "searchBean","slides" })
public void doSearch() {
        //load data (slides) from data base
        //navigate to another zul where i display my data
    }

}

同じ zul にとどまるとデータが表示されますが、別の zul に移動すると何も表示されません。私はExecutions.sendRedirect("/result.zul")成功せずに使用しようとしました。

4

1 に答える 1

1

ブラウザのリダイレクトを行わないでください。AJAX を使用して結果を表示します。

次の例では、1 つの zul ファイルに 2 つのゾーンがあり、そのうちの 1 つはデフォルトで非表示になっています。ボタンをクリックすると、最初のゾーンが非表示になり、2 番目のゾーンが表示されます。

<zk>
<zscript>
boolean showFirstZone = true; 
</zscript>
<window visible="${showFirstZone}" id="firstZoneWindow">
    This is first zone. 

    <include src="/WEB-INF/search/search-input.zul"/>

    <button label="Switch To Results" onClick="secondZoneWindow.visible=true;firstZoneWindow.visible=false;" />

</window>

<window visible="${!showFirstZone}" id="secondZoneWindow" >
   This is second zone. 

   <include src="/WEB-INF/search/search-result.zul"/>

</window>
</zk>

含まれている zul ファイルを /WEB-INF の下に配置して、ブラウザーからアクセスできないようにすることに注意してください。これは良い考えです。そうすれば、システムのデスクトップを定義するエントリ ページのみがサイトのメイン フォルダ (顧客用、スタッフ用、管理者用など) にあり、それぞれが /WEB-INF の下に隠されているフラグメントを含めて再利用できます。

法則:

php/jsp を使用すると、ブラウザーに新しいページを要求してもらい、セッションを介して関連する日付が表示されるようにそれらを描画します。ZK は、AJAX によって更新されるアプリケーションを意味する「シングル ページ アプリケーション」を構築する傾向があるデスクトップ指向のフレームワークです。ブラウザのリダイレクトを行うことは、AJAX の更新を行うことではありません。すべての JS と CSS の再フェッチと zul ファイルの再評価を強制することは、AJAX を介して動的更新を行うよりもはるかに効率的ではありません。

http://books.zkoss.org/wiki/ZK%20Developer%27s%20Reference/UI%20Composing/Component-based%20UIを読むと、新しい URL を開くと新しいデスクトップが作成されることがわかります。ZK は実際には、レンダリングする HTML ページに body onunload javascript ハンドラを配置し、ユーザーが新しい URL に移動したときに既存のデスクトップを破棄する最終的な AJAX イベントを送信するようブラウザに指示します。したがって、ユーザーに最初の zul ページから移動させると、実際に ViewModel が破棄されます。ブラウザが移動する新しい URL にデータが表示されないのはそのためです。これは、ユーザーが離れたものとは何の関係もない、まったく新しい ViewModel を取得するまったく新しいデスクトップです。

于 2012-06-11T21:36:35.027 に答える