首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ZK :使用<include>将参数传递给另一个视图模型

ZK :使用<include>将参数传递给另一个视图模型
EN

Stack Overflow用户
提问于 2015-07-06 16:48:40
回答 3查看 3.3K关注 0票数 1

我想要做的是通过<include>viewModel将值从page1.zul传递到page2.zul

来自page1.zul的,我有

代码语言:javascript
运行
复制
<include processId="@bind(vm.selectedProcess.id)" src="@load('page2.zul')"></include>

然后,它应该传递给page2.zul中的viewModel

代码语言:javascript
运行
复制
@Init
public void init(@ExecutionArgParam("processId") String processId){
    System.out.println("processInstanceId : " + processId);
}

但是,我总是得到一个空值。你知道怎么做吗?page2.zul看起来像这样:

代码语言:javascript
运行
复制
<div apply="org.zkoss.bind.BindComposer"
    viewModel="@id('vm') @bind('com.mrye.viewModel')">

    <label value="@load(vm.processId)"></label>
</div>
EN

回答 3

Stack Overflow用户

发布于 2015-07-06 21:36:00

首先,为虚拟机的Id创建可区分的名称。

然后zul:

代码语言:javascript
运行
复制
<div apply="org.zkoss.bind.BindComposer"
viewModel="@id('vm') @init('com.mrye.viewModel', processId = parentVM.selectedProcess.id )">

和VM2:

代码语言:javascript
运行
复制
@Init
public void init (@BindingParam("processId") MyObject processID) {

在注释后编辑:

正如您在this fiddle中看到的,它可以工作,但您的参数必须初始化。

如果您希望将“实时数据”传递给其他parentVM (而不是其他视图模型),则可以使用zul或仅使用zul。

如果实时数据需要在视图模型本身中,您可以使用不可见的文本框,在此从parentVM加载数据,并在某个操作发生之前将其保存在includedVM中。

请在此处查看updated fiddle

票数 2
EN

Stack Overflow用户

发布于 2015-07-07 13:32:14

你可以在这里查看

Index.zul

代码语言:javascript
运行
复制
<?page title="URL Parameters Test" contentType="text/html;charset=UTF-8"?>  
<zk>  
<window title="URL Parameters Test" border="normal">  

    <include src="header.zul?test=5" />  

</window>  
</zk>  

在上面的代码中,您可以使用URL检查它传递参数,这里的测试是参数名称和value=5

代码语言:javascript
运行
复制
<?page contentType="text/html;charset=UTF-8"?>
<zk>
<window border="none" width="100%" height="100%" apply="pkg$.HeaderComposer">

<label id="lblHeader" />

<div>
Load from EL [ <label value="${param.test}" />]
</div>
</window>
</zk>

在此页面中,我们使用${param.test}来获取传入index.zul、HeaderComposer.java

代码语言:javascript
运行
复制
import org.zkoss.zk.ui.*;  
import org.zkoss.zk.ui.event.*;  
import org.zkoss.zk.ui.util.*;  
import org.zkoss.zk.ui.ext.*;  
import org.zkoss.zk.au.*;  
import org.zkoss.zk.au.out.*;  
import org.zkoss.zul.*;  

public class HeaderComposer extends GenericForwardComposer{  


    Label lblHeader;  

    @Override  
    public void doAfterCompose(Component comp) throws Exception {  

        try {  
            super.doAfterCompose(comp);  
        }   
        catch (Exception e) {  
            e.printStackTrace();  
        }  

        /* 
         * retrieve url parameters 
         */  
        String[] parameter = (String[]) param.get("test");  

        if (parameter != null)  
            lblHeader.setValue( "Congratulations! Your parameters value is " + parameter[0] );  
        else  
            lblHeader.setValue( "No parameters found. URL should be something like http://yourserver/yoursite/main.zul?parameter=param-value" );  
    }  
}

有关更多信息,请查看http://zkframeworkhint.blogspot.in/2014/05/zk-include-how-to-pass-and-get.html

票数 1
EN

Stack Overflow用户

发布于 2015-07-08 08:10:24

只需确保在VM1上正确初始化了值vm.selectedProcess.id并且它有一个值,在VM2中添加@AfterCompose生命周期注释,然后在@Init上获取值,根据您的代码,这应该适用于VM2:

代码语言:javascript
运行
复制
   Long processId;

   @AfterCompose
   public void initAfterCompose(@ContextParam(ContextType.VIEW) Component view) {
       Selectors.wireComponents(view, this, false);
   }

   @Init
   public void init() {
       //get dynamic attribut
       processId = (Long) Executions.getCurrent().getAttribute("processId");
   }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31241415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档