ZKSpring, как передать переменные в ZK zul из контроллера Spring MVC? - PullRequest
1 голос
/ 21 апреля 2011

Я уже некоторое время играю с З.К., и теперь приходят серьезные вещи.Я успешно интегрировал spring и zk, и маршрутизация работает так, как я использую @controller annotation.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 (без веб-потоков)?Spring Controller для маршрутизации и ForwardComposer для обработки поведения ajax (то есть событий)?например, следует ли написать код для обработки вызова ajax при работе исключительно Spring MVC?

вопрос 3 : я использую список в этом, но мне нужно сделать что-то изконтекстное меню на выбранном объекте. Считаете ли вы, что сетка подходит для этого?

спасибо за чтение этого.

1 Ответ

4 голосов
/ 06 мая 2011

Ответ на вопрос 1 : ${c:l('accounts') извлечет значение метки с ключом accounts из файла свойств i3label (обычно используется для интернационализации в ZK).Если вы хотите получить доступ к переменной (обычно это Java-бин): ​​1. объявите переменный resolver в верхней части вашей страницы, используя директиву <variable-resolver class="org.zkoss.spring.DelegatingVariableResolver"?>. 2. получите доступ к Java-бину в ZUML, используя выражения EL для.например.$ {account}

Ответ на вопрос 2 : Я бы порекомендовал сделать это ZK MVC, то есть расширить ваши контроллеры из ZK GenericForwardComposer для обработки событий.Вы всегда можете использовать Spring для управления жизненным циклом этих контроллеров с помощью Spring Framework.

Ответ на вопрос 3 : Я не думаю, что в этом сценарии есть какое-либо преимущество при использовании сетки над списком.В любом случае вы можете всплывающее контекстное меню либо в событии выбора строки сетки, либо в списке выбора элемента списка.

...