1

当我必须在 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;
    }

这是简单的查询,因为事先我必须创建更复杂的查询,例如使用计数和查询中的许多函数,以及我在 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 创建 web,如果在 icefaces 中,我只需将此标签放在单元格中:

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

我很抱歉我的英语不好和这个新手问题..谢谢..:D

4

2 回答 2

0

这是将 UI 组件与集合相关联时的典型场景。您可以在此处参考更多详细信息,但基本思想是使用 dot 访问实体属性。数据绑定表达式中的运算符(注意:您必须在实体类中为这些属性定义 getter 方法)。因此,在您的情况下,您的 listitem 声明应如下所示

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

希望这可以帮助。

于 2011-06-22T21:14:38.430 回答
-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);


    }

该索引基于您在本机查询中的列..

在 .zul 页面中,您只需执行以下操作:

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

itemRenderer标签添加默认值itemRenderermodel基于您的控制器的列表..感谢您的所有回复,对不起我的英语不好..谢谢..

于 2011-06-30T09:16:06.497 回答