Zk如何将参数从java代码传递到zk页面?

 1510193264a 发布于 2023-02-04 19:23

我是ZK的新手.

我使用非常古老的zk框架版本(遗留项目).

我渲染zk页面:

Executions.createComponents("/myZul.zul", null, null))

我需要将参数传递给zul.如果参数为true,我需要渲染复选框,否则 - 不开启myZul.zul

我需要这样的东西在zul上:

if(parameter){

    
}

更新 我的zul:


        ....

我需要doAfterComposeZulHandler里面的覆盖方法?

再一次:

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)

1 个回答
  • 你可以这样做 :

    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)

    2023-02-04 19:27 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有