我想要做的是通过<include>和viewModel将值从page1.zul传递到page2.zul。
来自page1.zul的,我有
<include processId="@bind(vm.selectedProcess.id)" src="@load('page2.zul')"></include>然后,它应该传递给page2.zul中的viewModel
@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>发布于 2015-07-06 21:36:00
首先,为虚拟机的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中看到的,它可以工作,但您的参数必须初始化。
如果您希望将“实时数据”传递给其他parentVM (而不是其他视图模型),则可以使用zul或仅使用zul。
如果实时数据需要在视图模型本身中,您可以使用不可见的文本框,在此从parentVM加载数据,并在某个操作发生之前将其保存在includedVM中。
请在此处查看updated fiddle。
发布于 2015-07-07 13:32:14
你可以在这里查看
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检查它传递参数,这里的测试是参数名称和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
发布于 2015-07-08 08:10:24
只需确保在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");
}https://stackoverflow.com/questions/31241415
复制相似问题