我想要做的是将值从page1.zul
传递到page2.zul
到<include>
和viewModel
。
来自page1.zul
,我有
<include processId="@bind(vm.selectedProcess.id)" src="@load('page2.zul')"></include>
然后它应传递到viewModel
page2.zul
@Init
public void init(@ExecutionArgParam("processId") String processId){
System.out.println("processInstanceId : " + processId);
}
但是,我总是得到一个空值。知道如何做这件事吗? page2.zul
看起来像这样:
<div apply="org.zkoss.bind.BindComposer"
viewModel="@id('vm') @bind('com.mrye.viewModel')">
<label value="@load(vm.processId)"></label>
</div>
答案 0 :(得分:1)
首先,要区分VM的Id。
然后zul:
<div apply="org.zkoss.bind.BindComposer"
viewModel="@id('vm') @init('com.mrye.viewModel', processId = parentVM.selectedProcess.id )">
和VM2:
@Init
public void init (@BindingParam("processId") MyObject processID) {
评论后编辑:
正如您在this fiddle中看到的那样,但是您的参数必须初始化。
如果你想拥有&#34;实时数据&#34;传递给其他zul(不是其他viewmodel),你可以使用@ref
或只使用parentVM
如果实时数据需要在viewmodel本身中,您可以使用一个不可见的文本框,从parentVM中加载数据,并在某些操作发生之前将其保存在includedVM中。
请在此处查看updated fiddle。
答案 1 :(得分:1)
您可以在这里查看
Index.zul
<?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检查它是否传递参数test test is argument name and value = 5
<?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
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
答案 2 :(得分:0)
确保在VM1上正确初始化值vm.selectedProcess.id
并且它有一个值,在VM2中添加@AfterCompose
生命周期注释然后在@Init
获取值,根据您的这应该适用于VM2:
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");
}