我是ZK的新手.
我使用非常古老的zk框架版本(遗留项目).
我渲染zk页面:
Executions.createComponents("/myZul.zul", null, null))
我需要将参数传递给zul.如果参数为true,我需要渲染复选框,否则 - 不开启myZul.zul
我需要这样的东西在zul上:
if(parameter){}
更新 我的zul:
....
我需要doAfterCompose
ZulHandler里面的覆盖方法?
再一次:
ZUL:
zul creater:
... Map args = new HashMap(); Boolean isManufacturing = true; args.put("isManufacturingKey", isManufacturing); ZulHandler window = Preconditions .checkNotNull((ZulHandler) Executions.createComponents( "/decision_comment_window.zul", null, args)); window.setTitle(decisionModel.getName() + " decision"); if (isManufacturing) { Checkbox checkbox = (Checkbox) Path .getComponent("/decisionCommentWindow/emergency_change_checkbox_id"); checkbox.setChecked(workflow.getEmergencyChange());//I have Null pointer here because checkbox is null } ...
chillworld.. 8
你可以这样做 :
HashMap map = new HashMap(); Boolean isManufacturing = true; args.put("isManufacturingKey", isManufacturing); map.put("isManufactringChecked",workflow.getEmergencyChange()); Executions.createComponents("/myZul.zul", null , map);
创建此控制器:
public class ZulHandler extends SelectorComposer { @Wire("#win") private Window myWin; private Boolean manufacturing; private Boolean manufactringChecked; @Override public void doAfterCompose(Component window) throws Exception { super.doAfterCompose(window); if (arg.containsKey("isManufacturingKey")) { manufacturing = (Boolean) arg.get("isManufacturingKey")); } else { //Declare what is is when you don't have the arg } if (arg.containsKey("isManufactringChecked")) { manufactringChecked = (Boolean) arg.get("isManufactringChecked")); } else { //Declare what is is when you don't have the arg } } public Boolean isManufacturing () { return manufacturing; } public Boolean isManufactringChecked() { return manufactringChecked ; }
改变你的zul:
use="handlers.ZulHandler">
至 :
apply="handlers.ZulHandler">
现在你只需要在那里实现doOk方法.如果它只是关闭该窗口的按钮,您可以在zul中执行以下操作:
编辑:
我的第一个解决方案是正确的你的问题.你只是因为工作不对而遇到了下一个问题.您的问题是您希望呼叫者影响目标.只需给出参数并让目标的控制器完成工作.
它就像一个汽车工厂,他们说你的车可以行驶200公里/小时,但你作为汽车的控制器,你是否以200公里/小时的速度驾驶,或者当它没有指定时,你还可以开车吗?
您也不需要为同一问题制作dubbelposts.你可以为nullpointer提出一个问题,但标题几乎是相同的,并且帖子中的内容也是如此.
编辑:
如果你需要设置title =>将标题放在args中并在你的代码中声明.否则,我编辑了控制器类,所以你有你的窗口变量.(或者你自己成为窗口的公共getter和setter)
你可以这样做 :
HashMap map = new HashMap<String, String>(); Boolean isManufacturing = true; args.put("isManufacturingKey", isManufacturing); map.put("isManufactringChecked",workflow.getEmergencyChange()); Executions.createComponents("/myZul.zul", null , map);
创建此控制器:
public class ZulHandler extends SelectorComposer { @Wire("#win") private Window myWin; private Boolean manufacturing; private Boolean manufactringChecked; @Override public void doAfterCompose(Component window) throws Exception { super.doAfterCompose(window); if (arg.containsKey("isManufacturingKey")) { manufacturing = (Boolean) arg.get("isManufacturingKey")); } else { //Declare what is is when you don't have the arg } if (arg.containsKey("isManufactringChecked")) { manufactringChecked = (Boolean) arg.get("isManufactringChecked")); } else { //Declare what is is when you don't have the arg } } public Boolean isManufacturing () { return manufacturing; } public Boolean isManufactringChecked() { return manufactringChecked ; }
改变你的zul:
use="handlers.ZulHandler"> <zk if="${isManufacturingKey}"> <checkbox id="checkbox_id" label="check" /> </zk>
至 :
apply="handlers.ZulHandler"> <checkbox id="checkbox_id" label="check" checked="${$composer.manufactringChecked}" visible="${$composer.manufacturing}"/>
现在你只需要在那里实现doOk方法.如果它只是关闭该窗口的按钮,您可以在zul中执行以下操作:
<button label="Close" onClick="spaceOwner.detach()" />
编辑:
我的第一个解决方案是正确的你的问题.你只是因为工作不对而遇到了下一个问题.您的问题是您希望呼叫者影响目标.只需给出参数并让目标的控制器完成工作.
它就像一个汽车工厂,他们说你的车可以行驶200公里/小时,但你作为汽车的控制器,你是否以200公里/小时的速度驾驶,或者当它没有指定时,你还可以开车吗?
您也不需要为同一问题制作dubbelposts.你可以为nullpointer提出一个问题,但标题几乎是相同的,并且帖子中的内容也是如此.
编辑:
如果你需要设置title =>将标题放在args中并在你的代码中声明.否则,我编辑了控制器类,所以你有你的窗口变量.(或者你自己成为窗口的公共getter和setter)