ofbiz进击 第四节。 我的form之旅

一般使用ofbiz做后台管理的时候,多数会使用ofbiz的form去做后台。下面我就总结下我在使用form的时候的一些总结与问题吧。

1.首先,我们看如何使用最简单form去查询某个单个的对象,并对其进行显示。

如下:

< form name= "returnHeaderReason" type = "single" default-map-name ="returnHeader" >
       <actions >
                   <entity-one value-field = "returnHeader" entity-name= "ReturnHeader" >
                         <field-map field-name = "returnId" from-field= "parameters.returnId" />
                   </entity-one >
       </actions >
       <field name = "returnReason" title= "退货理由" ><display ></display ></field >
    </form > 

只需要在actions标签里面   使用entity-one  然后通过field-map 去根据returnId 去查询到一条记录

然后使用default-map-name 的方式,去制定默认的映射方式(则为查询出来的entity的name),field则为要展示的列名。

如果有的时候要展示全部的列  可以根据

 < auto-fields-entity entity-name = ""/>< auto-fields-service service-name = ""/>

这两个标签去根据实体或者服务去自动展现出所有的相关的列。

上述的为最简单的单个对象的展示方式,下面我列举一张单表的列表为大家呈现一下ofbiz所提供列表展示功能。

< form name= "listReturnItem" type = "list" list-name= "listReturnItems"
             odd-row-style= "alternate-row" header-row-style ="header-row-2" default-table-style = "basic-table hover-bar">
             <actions >
                   <entity-and entity-name = "ReturnItem" use-cache= "false" list= "listReturnItems" >
                        <field-map field-name = "returnId" from-field= "parameters.returnId" />
                       </entity-and >
             </actions >
        <field name = "returnQuantity" title= "退货数量" ><display ></display ></field >
        <field name = "returnPrice" title= "退货单价" ><display ></display ></field >
        <field name = "returnTotalPrice" title= "退货金额" ><display ></display ></field >
    </form >  

同样的道理,这里通过actions 标签里面的entity-and标签查询出来所需要的列表,列表名称为listReturnItems  合格的List 要跟form的list-name保持一致即可,这里不能写default-map-name,如果写了这个映射标签,当使用row-actions的时候,获取单行的某个属性的时候,调用的将不会是单行的对象,而是default-map-name所制定的对象。现在,一个单表的列表已经能够显示出来了。可是,如果要显示一个多表联合查询的结果,又该怎么处理呢?就是我刚刚所说的  <row-actions > 这个标签。

< row-actions>
      <script location= "component://portal/webapp/portal/WEB-INF/actions/returnOrder/listReturnItem.groovy" />
</row-actions >

给上述的form加上一个row-actions标签,则代表每行将调用的groovy。接下来我贴出来的是最简单的groovy.(groovy采用的是java语言类似的编写风格,具体的我在以后的学习中会继续跟大家分享)

if (!productId) return;
product = delegator.findOne ("Product" ,[productId:productId], false);
productDescription = product. get("description" )
context. productDescription = productDescription 

上述的代码是判断productId是否存在,如果不存在,则返回,如果存在,则通过delegator的findOne方法去查询出product对象,然后获取对应的商品描述,将商品描述赋给context,这样在form里面就可以添加一行显示列了

<field name = "productDescription" title= "商品描述" ><display ></display ></field >

上面我给大家分享的是没有分页的多列表格,如果需要分页功能,我们又该如何处理,别急,下面就为大家展示。

首先要知道,在ofbiz里面使用分页,肯定要分为两个form,一个是上面的查询的form 一个是下面的列表form .

 < decorator-section name = "body">
                         <section >
                               <widgets >
                                    <decorator-screen name= "FindScreenDecorator" location= "component://common/widget/CommonScreens.xml" >
                                        <decorator-section name= "search-options" >
                                            <include-form name= "SearchReturnOrder" location= "component://portal/widget/ReturnOrderForms.xml" />
                                        </decorator-section >
                                           <decorator-section name= "search-results" >
                                            <include-form name= "ListReturnOrder" location= "component://portal/widget/ReturnOrderForms.xml" />
                                        </decorator-section >
                                    </decorator-screen >
                               </widgets >
                         </section >
                    </decorator-section >

上面的就是分别是实现分页的两个form,我先贴出的是查询form的代码

< form name= "SearchReturnOrder" target = "ListReturnOrder" title= "" type= "single"
          header-row-style= "header" default-table-style = "basic-table talbe_left_padding">
        <field name = "noConditionFind">< hidden value= "Y" /></field >
        <field name = "returnId">< text ></text ></field >
       <field name = "statusId" title= "${uiLabelMap.CommonStatus}">
            <drop-down allow-empty = "true">
                <entity-options entity-name = "StatusItem" description= "${description}" >
                    <entity-constraint name = "statusTypeId" operator= "equals" value = "ORDER_RETURN_STTS"/>
                </entity-options >
            </drop-down >
        </field >
        <field name = "createdStamp_fld0_value" title= "申请开始时间" >
             <date-time type = "date"/>
        </field >
        <field name = "createdStamp_fld0_op">
             <hidden value = "greaterThanFromDayStart"/>
        </field >
        <field name = "createdStamp_fld1_value" title= "申请结束时间" >
             <date-time type = "date"/>
        </field >
        <field name = "createdStamp_fld1_op">
             <hidden value = "upThruDay"/>
        </field >
       <field name = "searchButton" title= "${uiLabelMap.CommonFind}" widget-style= "smallSubmit" ><submit button-type = "button"/></ field>
    </form > 

该form可能涉及了很多别的内容,如果大家为初学者,可以耐心的听我分析每一个标签,如果您不是初学者,您完全不用看本文章,这完全是我自己写给我自己的学习进阶分析 ,目的是为了帮助初学者分析以及自己日后的查看而已。

在field中,可以添加标签来表示该field的表现形式。例如drop-down  就表示该字段以下拉框的形式展示

entity-name 标示下拉框要查询的对象名, description 标示要展示的字段。如果不写

<entity-constraint name = "statusTypeId" operator= "equals" value = "ORDER_RETURN_STTS"/>

这个标签的话,则标示将会查询出表status_item里面所有的数据。 上面的这个标签的作用就是起到过滤的作用,标示 只显示 字段 statusTypeId equals ORDER_RETURN_STTS 的数据。

<field name = "createdStamp_fld0_value" title= "申请开始时间" >
             <date-time type = "date"/>
        </field >
        <field name = "createdStamp_fld0_op">
             <hidden value = "greaterThanFromDayStart"/>
        </field >

  

这是一对一起使用的标签,表示 createdstamp 字段显示格式为date日期形式,当执行查询的时候,会根据 greaterThanFromDayStart 去查询大于当天开始的时间。

有人可能会为这是为什么,具体的你可以 到 /emt/framework/common/src/org/ofbiz/common/FindServices.java 这个类中去查看是如何映射的。可以说说这是ofbiz的一种映射机制吧。

以上的是一些常用的标签,然后查询这个form 要跟列表做集成的话,只需要在target中指定ListReturnOrder 即列表的查询control的方式。

时间: 2024-10-15 21:49:10

ofbiz进击 第四节。 我的form之旅的相关文章

ofbiz进击 第六节。 --OFBiz配置之[widget.properties] 配置属性的分析

配置内容分析如下 # -- 定义上下文使用者 -- security.context =default # -- 定义密码限制长度最小值 -- password.length.min =5 # -- 登录失败的最大次数 -- max.failed.logins =3 # -- 保存密码修改记录的最大条数, 被保存在 UserLoginPasswordHistory 表的记录 #           可防止使用过的密码再次使用, 0 表示不保存历史记录 -- password.change.his

ofbiz进击 第五节。 --OFBiz配置之[general.properties] 共有属性的分析(含email)

文件内容如下 unique.instanceId=ofbiz1     #--为JobManger方法提供实例的ID(必须小于20个字符)    currency.uom.id.default=USD     #--设置默认的金额显示_货币//缺省货币符号(必须在Uom表中存在,用3个西文字符表示)    currency.decimal.format=#,##0.00     #--设置默认的金额显示_货币的格式(格式化: UtilFormatOut.java)    VISUAL_THEME

centos LNMP第二部分nginx、php配置 第二十四节课

centos  LNMP第二部分nginx.php配置  第二十四节课 上半节课 下半节课 f

第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理

第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲-elasticsearch(搜索引擎)的mapping映射管理 1.映射(mapping)介绍 映射:创建索引的时候,可以预先定义字段的类型以及相关属性elasticsearch会根据json源数据的基础类型猜测你想要的字段映射,将输入的数据转换成可搜索的索引项,mapping就是我们自己定义的字段数据类型,同时告诉elasticsearch如何索引数据以及是否可以被搜索 作用:会让索引建立的更加细致和完善 类型:静态映射和动态

centos 监控cacti/nagios/zabbix 第三十四节课

centos   监控cacti/nagios/zabbix   第三十四节课 上半节课 下半节课 f

centos 目录文件管理 第四节课

centos 目录文件管理  第四节课 上半节课 下半节课 mkdir   -p 创建多个目录mkdir  12  34  56 创建多个目录 mkdir  12  34  56 /bin/rm :直接跳过alias,直接执行rm,不提示 touch :若文件存在,更改文件的三个time rm -rf 误删文件用extundelete,不要再写,inode和文件名还在 1.安装依赖包 yum install -y e2fsprogs* 2.下载并安装extundelete

第三百二十四节,web爬虫,scrapy模块介绍与使用

第三百二十四节,web爬虫,scrapy模块介绍与使用 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. Scrapy 使用了 Twisted异步网络库来处理网络通讯.

centos mysql 优化 第二十四节课

centos mysql  优化  第二十四节课 f

centos mysql 优化 第四节课

centos mysql  优化  第四节课 =================================================rhel5.3左右的版本用vim打开slow log并wq,mysqld没有停还在读写slow log,导致mysqld无法写数据到slow log:wq 写入后,句柄有没有发生变化/proc文件系统里找句柄数据fd top.free.sar vmstat vmstat -S m 1 procs -----------memory---------- -