gpt4 book ai didi

java - zk mvc 2 .zul 共享相同的 Controller

转载 作者:行者123 更新时间:2023-12-01 05:16:38 26 4
gpt4 key购买 nike

如果我有 2 个 .zul,其中一个是列表框,另一个是模式窗口。他们可以使用相同的 Controller 吗?我就是无法让它发挥作用。

问题基本上是,我是否必须在两个 .zul 中使用 apply="myController" ?如果我这样做,我会在 myList 处收到 nullpointerException,因为我认为 zk 正在实例化 2 个 Controller 对象,并且模式不存在 myList。但如果我不在 modal.zul 应用 Controller ,那么当我按下按钮时什么也不会发生。

如何让 2 个 .zul 使用同一 Controller 实例?

邮件.zul

<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" ?>
<zk>
<hlayout>
<div id="winDiv" apply="com.company.controller.ProductController">
<vbox>
<listbox id="myList" width="690px" height="300px" >
<listhead>
<listheader hflex="min" label="id" sort="auto(id)" />
<listheader hflex="2" label="name" sort="auto(name)" />
<listheader hflex="4" label="description" sort="auto(description)" />
<listheader hflex="min" label="opcion"/>
</listhead>
</listbox>
</vbox>
</div>
<button label="new" id="new"/>
</hlayout>
</zk>

模态.zul

<?xml version="1.0" encoding="UTF-8"?>
<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
<window id="modalProductType" title="Nuevo tipo de producto" border="normal" width="420px"
closable="true" position="center,center" **apply="com.company.controller.ProductController"**>

<grid>
<columns>
<column hflex="1"/>
<column hflex="2"/>
</columns>
<rows>
<row>
Clave:
<textbox hflex="1" value="@{product.id}" readonly="true"/>
</row>
<row>
Nombre:
<textbox id="txtname" value="@{product.name}" hflex="1" tabindex="1" />
</row>
<row>
Description:
<textbox value="@{product.description}" rows="5" hflex="1" tabindex="2" />
</row>
<row>
<cell colspan="2" style="text-align:center">
<hlayout>
<button width="100px" id="save" label="Aceptar"/>
<button width="100px" label="close"/>
</hlayout>
</cell>
</row>
</rows>
</grid>
</window>

ProductController.java

public class ProductTypeController extends SelectorComposer {
@WiredVariable
private ProductTypeService productTypeService;

@Wire
private Listbox myList;

//methods...

}

最佳答案

不推荐这样做

  1. 为了避免并发问题(请参阅 here )例如。如果同一个 Controller 实例应用于多个 View ,则连线组件将指向最后一个 View ,从而导致 UI 行为不稳定。使用不同的实例比针对并发问题进行编码并使 Controller 线程安全更容易。
  2. 避免内存泄漏。例如。如果同一个 Controller 实例应用于两个完全不同的 View ,并且两个 View 中的组件都连接到其中,那么如果其中一个 View 没有被使用,其连接的组件仍然不会被释放,从而导致内存泄漏。

关于java - zk mvc 2 .zul 共享相同的 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11112384/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com