如何在列表框中显示值来自ZK上的createNativeQuery结果的值?

时间:2011-06-22 10:17:43

标签: web-applications zk

当我必须在Hibernate中显示createNativeQuery结果的值时,我会遇到非常令人沮丧的问题,我的代码是这样的:

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

不起作用,也就是列表项目show to row但是值为null,我很困惑这个问题,也许有人可以帮助我?

我曾经使用icefaces创建网页,如果在icefaces中,我只需将此标记放在单元格中:

currentRow[0]但在Zk,我还没找到它..

对不起我的英语不好和这个新手问题..谢谢..:D

2 个答案:

答案 0 :(得分:0)

这是将UI组件与集合相关联时的典型方案。您可以参考here了解更多详细信息,但基本思路是使用点访问实体属性。数据绑定表达式中的运算符(注意:您必须在实体类中为这些属性定义getter方法)。因此,在您的情况下,您的listitem声明应该看起来像这样

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

希望这有帮助。

答案 1 :(得分:-1)

好吧,我保证,我只需要实现ListitemRenderer,并将这样的代码添加到方法渲染中:

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标记添加默认值itemRenderermodel是基于您的控制器的列表..感谢您的所有回复,抱歉我的英文不好..谢谢.. < / p>