2

我已经和 zk 玩了一段时间了,现在是严肃的事情。我已经成功地集成了 spring 和 zk,并且路由在我使用 @controllerannotation.so 时工作正常。到目前为止一切都很好

现在我需要调用一个返回对象列表的网络服务

 import org.springframework.ui.Model;
 //.....
@RequestMapping("/accounts/personal/list")
public String list(Model model){

    try { 

        ArrayOfAccount result = port.getAccounts( null, 0, 20);
          //i thought with this i can grab the result collection.
          List<IAccount> accounts = result.getIAccount();
        model.addAttribute("accounts", accounts);
    } catch (Exception ex) {
        // TODO handle custom exceptions here
    }

    return "accountslist";
}

真正的问题是在 zul 文件中获取对象。

<?xml version="1.0" encoding="UTF-8"?>
<?init class="org.zkoss.zk.ui.util.Composition" arg0="/templates/mainlayout.zul"?>
<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit"?>
<!--<?variable-resolver class="org.zkoss.spring.DelegatingVariableResolver"?>-->
<!--<?variable-resolver class="org.zkoss.spring.init.WebflowVariableResolver"?>-->
<?taglib uri="http://www.zkoss.org/dsp/web/core" prefix="c"?>

 <zk xmlns="http://www.zkoss.org/2005/zul">
 <window self="@{define(content)}" id="pAccountWin">
 <label id="lblTest" value="click me" />
    <div>
        <listbox model="${c:l('accounts')}" id="lstAccount" multiple="true">
            <listhead>
                <listheader label="Account Name" />
                <listheader label="Account Type" />
                <listheader label="Mobile Phone" />
            </listhead>
            <listitem forEach="${c:l('accounts')}" value="${each}" >
                <listcell label="${each.getAccountName()}" />
                <listcell label="${each.getAccountType()}" />
                <listcell label="${each.getMobilePhone()}" />
        </listbox>
    </div>
  </window>  
</zk>

它没有抛出错误,但我觉得我做的不对。而且我也知道我可以使用 GenrericForwardComposer 来实现同样的效果,而无需“麻烦”(我相信)。这让我对我是否做对感到困惑事物。

问题 1
我怎样才能实现我试图做的事情,将账户变量传递给前端?

问题 2:使用 ZKspring(无 webflows)的最佳方式是什么?Spring Controller 做路由和 ForwardComposer 处理 ajax 行为(即事件)?例如,当仅采用 Spring MVC 方式时,是否应该编写代码来处理 ajax 调用?

问题 3:我在此使用列表框,但我需要从所选对象的上下文菜单中执行操作。您认为网格适合它吗?

感谢您阅读本文。

4

1 回答 1

4

问题 1 答案: 将从 i3label-properties 文件${c:l('accounts')中检索带有键的标签值accounts(通常用于 ZK 中的国际化)。如果要访问变量(通常是 Java bean) 1. 在页面顶部使用<variable-resolver class="org.zkoss.spring.DelegatingVariableResolver"?>指令声明变量解析器 2. 在 ZUML 中使用 EL 表达式访问 Java bean。例如。${帐户}

问题 2 的答案:我建议使用 ZK MVC 方式,即从 ZK GenericForwardComposer 扩展控制器来处理事件。您始终可以使用 Spring 使用 Spring 框架来处理这些控制器的生命周期。

问题 3 答案:在这种情况下,我认为使用网格而不是列表框没有任何优势。在任何情况下,您都可以在网格行选择事件或列表框列表项选择事件上弹出上下文菜单。

于 2011-05-06T09:13:06.080 回答