Как показать значение в списке, где значение от CreateNativeQuery Result на ZK? - PullRequest
1 голос
/ 22 июня 2011

Я получаю очень неприятную проблему, когда мне нужно показать значение из результата createNativeQuery в Hibernate, мой код выглядит так:

public List<Rmerchant> getListMerchantbyMasterMerchanttest(){
        List<Rmerchant> lstMerchant=em.createNativeQuery("select merchant_name,merchant_email,merchant_status from rmerchant where master_merchant_id=123")

                .getResultList();
        return lstMerchant;
    }

это запрос simpe, потому что заранее мне нужно создать большесложный запрос, например, с использованием count, и многие функции в запросе, и мой код на странице ZK zul, например:

<?xml version="1.0" encoding="UTF-8"?>
<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" arg0="./test"?>
<?init class="com.nsia.doku.escrow.controller.testController"?>
<zk xmlns="http://www.zkoss.org/2005/zul">
    <window id="test" xmlns:n="native" title="test" border="normal" position="center" apply="com.nsia.doku.escrow.controller.testController">
        <listbox  model="@{test$composer.lstMerchant}"
                vflex="true">
                <auxhead>
                    <auxheader colspan="3" class="topic">EDS Status</auxheader>
                </auxhead>
                <listhead>
                    <listheader label="Merchant Name"  align="center"/>
                    <listheader label="merchant email" align="center" />
                    <listheader label="merchant status"  align="center" />

                </listhead>
                <listitem self="@{each=lstMerchant}">
                    <listcell label='@[lstMerchant}' />
                    <listcell label='@{lstMerchant}' />
                    <listcell label='@{lstMerchant}' />
                </listitem>
            </listbox>

    </window>

</zk>

, если значение похоже на то, что я пишу, listcell будет выглядеть так:

merchant name                                  merchant email                                
[merch001, jhjhjh, null]                       [merch001, jhjhjh, null]                      
[fahmi0090908789788, fahmi@gmail.com, null]    [fahmi0090908789788, fahmi@gmail.com, null] 

если код, который я изменяю в listitem следующим образом:

<listitem self="@{each=lstMerchant}">
                    <listcell label='@[lstMerchant[0]}' />
                    <listcell label='@{lstMerchant[1]}' />
                    <listcell label='@{lstMerchant[2]}' />
                </listitem>

                or 
<listitem self="@{each=lstMerchant}">
                    <listcell label='@[lstMerchant["0"]}' />
                    <listcell label='@{lstMerchant["1"]}' />
                    <listcell label='@{lstMerchant["2"]}' />
                </listitem>

                or 
                <listitem self="@{each=lstMerchant}">
                    <listcell label='@[lstMerchant["merchant_name"]}' />
                    <listcell label='@{lstMerchant["merchant_email"]}' />
                    <listcell label='@{lstMerchant["merchant_status"]}' />
                </listitem>

                or

                every lstMerchant i change with each

не работает, то есть listitem показывают в строку, но значение равно нулю, возможно, я запутался в этой проблеме, возможнокто-нибудь может мне помочь?

Я использовал для создания сети, используя Icefaces, если в Icefaces, я просто должен поместить этот тег в ячейку:

currentRow[0] но в Zk, я не нашел его..

извините за мой плохой английский и этот вопрос новичка .. спасибо ..: D

Ответы [ 2 ]

0 голосов
/ 30 июня 2011

хорошо, как я обещаю, единственное, что мне нужно сделать, - реализовать ListitemRenderer и добавить следующий код в метод render:

public void render(Listitem li, Object data) throws Exception {
        Object[] obj=(Object[]) data;
        new Listcell((String) obj[16]).setParent(li);
        new Listcell((String) obj[17]).setParent(li);
        new Listcell((String) obj[22]).setParent(li);
        new Listcell((String) obj[0]).setParent(li);
        new Listcell((String) obj[1]).setParent(li);
        new Listcell((String) obj[2]).setParent(li);
        new Listcell((String) obj[3]).setParent(li);
        new Listcell((String) obj[18]).setParent(li);
        new Listcell((String) obj[19]).setParent(li);
        new Listcell((String) obj[20]).setParent(li);
        new Listcell((String) obj[21]).setParent(li);
        new Listcell((String) obj[4]).setParent(li);
        new Listcell((String) obj[5]).setParent(li);
        new Listcell((String) obj[6]).setParent(li);
        new Listcell((String) obj[7]).setParent(li);
        new Listcell((String) obj[8]).setParent(li);
        new Listcell((String) obj[10]).setParent(li);
        new Listcell((String) obj[15]).setParent(li);
        new Listcell((String) obj[12]).setParent(li);
        new Listcell((String) obj[13]).setParent(li);
        new Listcell((String) obj[14]).setParent(li);
        new Listcell((String) obj[23]).setParent(li);
        new Listcell((String) obj[24]).setParent(li);
        new Listcell((String) obj[25]).setParent(li);


    }

индекс основан на вашем столбце в вашем nativequery

и на странице .zul вам нужно только сделать это:

<listbox  model="@{dokureport$composer.lstTrans}"
                vflex="true" itemRenderer="@{dokureport$composer.itemRenderer}">

itemRenderer тег добавить значение по умолчанию itemRenderer и список model на основе вашего контроллера ..спасибо за ваш ответ и извините за мой плохой английский .. спасибо ..

0 голосов
/ 23 июня 2011

Это типичный сценарий при связывании компонентов пользовательского интерфейса с коллекцией.Вы можете сослаться на здесь для более подробной информации, но основная идея заключается в том, чтобы получить доступ к свойствам сущности, используя точкуоператор в вашем выражении привязки данных (Примечание: вы должны иметь методы getter, определенные для этих свойств в вашем классе сущности).Так что в вашем случае ваше объявление listitem должно выглядеть примерно так

<listitem self="@{each=merchant}">
                <listcell label='@{merchant.name}' />
                <listcell label='@{merchant.email}' />
                <listcell label='@{merchant.address}' />
            </listitem>

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...