0

私はかなり長い間ZKフレームワークを研究しています。HTTP リクエストでパラメータを設定し、他のページでそれらを取得する方法を理解できませんでしたか?

@GlobalCommand注釈も使用できませんでした。@GlobalCommandこれは実際にどのように機能しますか?

ポップアップまたはモーダル ダイアログに値を送信したくありません。sendRedirectなどを介して独立したzulページに値を送信したい...

この 2 つの例を挙げてください。

私が作った例@GlobalCommand

DemoVM.java

package com.nagarro.viewmodel;

import java.util.HashMap;
import org.zkoss.bind.BindUtils;
import org.zkoss.bind.annotation.BindingParam;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.GlobalCommand;
import org.zkoss.zk.ui.Executions;
import org.zkoss.bind.annotation.NotifyChange;

public class DemoVM {

    private String value1;
    private String value2;

    @Command
    public void showModelWin() {
        final HashMap<String, Object> map = new HashMap<String, Object>();
        map.put("value1", this.value1);
        map.put("value2", this.value2);
        BindUtils.postGlobalCommand(null, null, "getValues", map);
        Executions.sendRedirect("ModelWindow.zul");
    }

    @GlobalCommand
    @NotifyChange({ "value1", "value2" })
    public void refreshvalues(@BindingParam("returnvalue1") String str1,
            @BindingParam("returnvalue2") String str2) {
        this.value1 = str1;
        this.value2 = str2;
    }

    public String getValue1() {
        return value1;
    }

    public void setValue1(String value1) {
        this.value1 = value1;
    }

    public String getValue2() {
        return value2;
    }

    public void setValue2(String value2) {
        this.value2 = value2;
    }
}

デモ.zul

<?page title="Demo Page" contentType="text/html;charset=UTF-8"?>
<zk>
    <window title="MVVM Modal window Passing arguments and return values"
        border="normal" apply="org.zkoss.bind.BindComposer" id="DemoVM"
        viewModel="@id('e') @init('com.nagarro.viewmodel.DemoVM')">
        Type any value and Press the Model Window Button
        <separator />
        Value 1 :
        <textbox value="@bind(e.value1)" />
        Value 2 :
        <textbox value="@bind(e.value2)" />
        <button label="Model Window" onClick=" @command('showModelWin')" />
    </window>
</zk>

ModelWindowVM.java

package com.nagarro.viewmodel;

import org.zkoss.bind.annotation.BindingParam;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.ContextParam;
import org.zkoss.bind.annotation.ContextType;
import org.zkoss.bind.annotation.ExecutionArgParam;
import org.zkoss.bind.annotation.GlobalCommand;
import org.zkoss.bind.annotation.Init;
import org.zkoss.bind.annotation.NotifyChange;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import java.util.HashMap;
import org.zkoss.bind.BindUtils;
import java.util.Map;

public class ModelWindowVM {

    private String value1;
    private String value2;



    @Init
    public void init(@ContextParam(ContextType.VIEW) Component view,
            @ExecutionArgParam("value1") String v1,
            @ExecutionArgParam("value2") String v2) {
        this.value1 = v1;
        this.value2 = v2;
    }


    @Command
    public void save() {
        Map<String, Object> args = new HashMap<String, Object>();
        args.put("returnvalue1", this.value1);
        args.put("returnvalue2", this.value2);
        BindUtils.postGlobalCommand(null, null, "refreshvalues", args);
        Executions.sendRedirect("Demo.zul");
    }

    @GlobalCommand("getValues")
    @NotifyChange({"value1","value2"})
    public void getValues(@BindingParam("value1") String value1, @BindingParam("value2") String value2){
        this.value1 = value1;
        this.value2 = value2;

    }
    public String getValue1() {
        return value1;
    }

    public void setValue1(String value1) {
        this.value1 = value1;
    }

    public String getValue2() {
        return value2;
    }

    public void setValue2(String value2) {
        this.value2 = value2;
    }

}

ModelWindow.zul

<?page title="Model Window Page" contentType="text/html;charset=UTF-8"?>
<zk>

    <window id="modalDialog"
        title="MVVM Modal window Passing arguments and retur values"
        width="420px" height="auto" border="normal" minimizable="false"
         maximizable="false" closable="true"
        action="hide: slideUp" apply="org.zkoss.bind.BindComposer"
        onCancel="@command('closeThis')"
        viewModel="@id('e') @init('com.nagarro.viewmodel.ModelWindowVM')">

        Change the values and Press the Ok Button to return changed
        values.
        <separator />
        Value 1 :
        <textbox value="@bind(e.value1)" />
        Value 2 :
        <textbox value="@bind(e.value2)" />
        <button label="Ok" onClick="@command('save')" />
    </window>
</zk>

BindUtils.postGlobalCommand() メソッドを使用しましたが、機能しません。

4

1 に答える 1

1

http リクエスト パラメータの意味がわかりません。たぶん、この
ようなパラメータで URLを呼び出したいですか?

Executions.createComponents(...)リダイレクトの代わりに使用
して、データのマップを新しいページにも渡すことができます。必要のないツリーの最上位の要素を
呼び出して、不要になったコンポーネントを切り離し、 新しいコンポーネントを元の親に追加するだけです。 URL を変更したい場合は、HTML5-History-APIを使用できます。
myComponent.setParent(null)

@GlobalCommandアノテーション付き のメソッドは、postGlobalCommand(...)

編集

しかし、問題は、ModelWindow.zul の VM インスタンスからpostGlobalCommand(...)
呼び出そうとするため、現時点では存在しないメソッドを呼び出そうとすることですが、 クライアントで ModelWindow.zul が開いていないため、インスタンスがありません。. VM クラス インスタンス は、初期化先のコンポーネントと常に共存することに注意してください。getValues(...)

ModelWindowVM

上で述べたように、問題を解決する方法は を使用することです。マップcreateComponents()
渡すだけでよいので、グローバル コマンドにcreateComponents().

zk のデータにアクセスするその他の方法

ここの一番下に、同じDesktop
の すべての *.zulComposerまたは VM クラスからアクセスできるように値を保存する方法が説明されています。

または、サーバー側のイベント キューを使用することもできます。

于 2013-01-07T06:52:59.333 に答える