一般使用ofbiz做后台管理的时候,多数会使用ofbiz的form去做后台。下面我就总结下我在使用form的时候的一些总结与问题吧。
1.首先,我们看如何使用最简单form去查询某个单个的对象,并对其进行显示。
如下:
  1. < form name= "returnHeaderReason" type = "single" default-map-name ="returnHeader" >
  2. <actions >
  3. <entity-one value-field = "returnHeader" entity-name= "ReturnHeader" >
  4. <field-map field-name = "returnId" from-field= "parameters.returnId" />
  5. </entity-one >
  6. </actions >
  7. <field name = "returnReason" title= "退货理由" ><display ></display ></field >
  8. </form > 
只需要在actions标签里面   使用entity-one  然后通过field-map 去根据returnId 去查询到一条记录
然后使用default-map-name 的方式,去制定默认的映射方式(则为查询出来的entity的name),field则为要展示的列名。
如果有的时候要展示全部的列  可以根据
  1. < auto-fields-entity entity-name = ""/>< auto-fields-service service-name = ""/>
这两个标签去根据实体或者服务去自动展现出所有的相关的列。
上述的为最简单的单个对象的展示方式,下面我列举一张单表的列表为大家呈现一下ofbiz所提供列表展示功能。
 
  1. < form name= "listReturnItem" type = "list" list-name= "listReturnItems"
  2. odd-row-style= "alternate-row" header-row-style ="header-row-2" default-table-style = "basic-table hover-bar">
  3. <actions >
  4. <entity-and entity-name = "ReturnItem" use-cache= "false" list= "listReturnItems" >
  5. <field-map field-name = "returnId" from-field= "parameters.returnId" />
  6. </entity-and >
  7. </actions >
  8. <field name = "returnQuantity" title= "退货数量" ><display ></display ></field >
  9. <field name = "returnPrice" title= "退货单价" ><display ></display ></field >
  10. <field name = "returnTotalPrice" title= "退货金额" ><display ></display ></field >
  11. </form >  
同样的道理,这里通过actions 标签里面的entity-and标签查询出来所需要的列表,列表名称为listReturnItems  合格的List 要跟form的list-name保持一致即可,这里不能写default-map-name,如果写了这个映射标签,当使用row-actions的时候,获取单行的某个属性的时候,调用的将不会是单行的对象,而是default-map-name所制定的对象。现在,一个单表的列表已经能够显示出来了。可是,如果要显示一个多表联合查询的结果,又该怎么处理呢?就是我刚刚所说的  <row-actions > 这个标签。
  1. < row-actions>
  2. <script location= "component://portal/webapp/portal/WEB-INF/actions/returnOrder/listReturnItem.groovy" />
  3. </row-actions >
给上述的form加上一个row-actions标签,则代表每行将调用的groovy。接下来我贴出来的是最简单的groovy.(groovy采用的是java语言类似的编写风格,具体的我在以后的学习中会继续跟大家分享)
  1. if (!productId) return;
  2. product = delegator.findOne ("Product" ,[productId:productId], false);
  3. productDescription = product. get("description" )
  4. context. productDescription = productDescription 
上述的代码是判断productId是否存在,如果不存在,则返回,如果存在,则通过delegator的findOne方法去查询出product对象,然后获取对应的商品描述,将商品描述赋给context,这样在form里面就可以添加一行显示列了 
  1. <field name = "productDescription" title= "商品描述" ><display ></display ></field >
上面我给大家分享的是没有分页的多列表格,如果需要分页功能,我们又该如何处理,别急,下面就为大家展示。
首先要知道,在ofbiz里面使用分页,肯定要分为两个form,一个是上面的查询的form 一个是下面的列表form .

  1. < decorator-section name = "body">
  2. <section >
  3. <widgets >
  4. <decorator-screen name= "FindScreenDecorator" location= "component://common/widget/CommonScreens.xml" >
  5. <decorator-section name= "search-options" >
  6. <include-form name= "SearchReturnOrder" location= "component://portal/widget/ReturnOrderForms.xml" />
  7. </decorator-section >
  8. <decorator-section name= "search-results" >
  9. <include-form name= "ListReturnOrder" location= "component://portal/widget/ReturnOrderForms.xml" />
  10. </decorator-section >
  11. </decorator-screen >
  12. </widgets >
  13. </section >
  14. </decorator-section >
上面的就是分别是实现分页的两个form,我先贴出的是查询form的代码
  1. < form name= "SearchReturnOrder" target = "ListReturnOrder" title= "" type= "single"
  2. header-row-style= "header" default-table-style = "basic-table talbe_left_padding">
  3. <field name = "noConditionFind">< hidden value= "Y" /></field >
  4. <field name = "returnId">< text ></text ></field >
  5. <field name = "statusId" title= "${uiLabelMap.CommonStatus}">
  6. <drop-down allow-empty = "true">
  7. <entity-options entity-name = "StatusItem" description= "${description}" >
  8. <entity-constraint name = "statusTypeId" operator= "equals" value = "ORDER_RETURN_STTS"/>
  9. </entity-options >
  10. </drop-down >
  11. </field >
  12. <field name = "createdStamp_fld0_value" title= "申请开始时间" >
  13. <date-time type = "date"/>
  14. </field >
  15. <field name = "createdStamp_fld0_op">
  16. <hidden value = "greaterThanFromDayStart"/>
  17. </field >
  18. <field name = "createdStamp_fld1_value" title= "申请结束时间" >
  19. <date-time type = "date"/>
  20. </field >
  21. <field name = "createdStamp_fld1_op">
  22. <hidden value = "upThruDay"/>
  23. </field >
  24. <field name = "searchButton" title= "${uiLabelMap.CommonFind}" widget-style= "smallSubmit" ><submit button-type = "button"/></ field>
  25. </form > 
该form可能涉及了很多别的内容,如果大家为初学者,可以耐心的听我分析每一个标签,如果您不是初学者,您完全不用看本文章,这完全是我自己写给我自己的学习进阶分析 ,目的是为了帮助初学者分析以及自己日后的查看而已。
在field中,可以添加标签来表示该field的表现形式。例如drop-down  就表示该字段以下拉框的形式展示
entity-name 标示下拉框要查询的对象名, description 标示要展示的字段。如果不写  
  1. <entity-constraint name = "statusTypeId" operator= "equals" value = "ORDER_RETURN_STTS"/>
这个标签的话,则标示将会查询出表status_item里面所有的数据。 上面的这个标签的作用就是起到过滤的作用,标示 只显示 字段 statusTypeId equals ORDER_RETURN_STTS 的数据。       
  1. <field name = "createdStamp_fld0_value" title= "申请开始时间" >
  2. <date-time type = "date"/>
  3. </field >
  4. <field name = "createdStamp_fld0_op">
  5. <hidden value = "greaterThanFromDayStart"/>
  6. </field > 
这是一对一起使用的标签,表示 createdstamp 字段显示格式为date日期形式,当执行查询的时候,会根据 greaterThanFromDayStart 去查询大于当天开始的时间。
有人可能会为这是为什么,具体的你可以 到 /emt/framework/common/src/org/ofbiz/common/FindServices.java 这个类中去查看是如何映射的。可以说说这是ofbiz的一种映射机制吧。
以上的是一些常用的标签,然后查询这个form 要跟列表做集成的话,只需要在target中指定ListReturnOrder 即列表的查询control的方式。

  1. <form name="ListReturnOrder" target="" title="" list-name="listIt" type="list" paginate-target="ListReturnOrder"
  2. odd-row-style="alternate-row" header-row-style="header-row-2" default-table-style="basic-table hover-bar jointd">
  3. <actions>
  4. <service service-name="performFind" result-map="result" result-map-list="listIt">
  5. <field-map field-name="inputFields" from-field="parameters"/>
  6. <field-map field-name="entityName" value="ReturnHeader"/>
  7. <field-map field-name="orderBy" from-field="parameters.sortField"/>
  8. <field-map field-name="viewIndex" from-field="viewIndex"/>
  9. <field-map field-name="viewSize" from-field="viewSize"/>
  10. </service>
  11. </actions>
  12. <row-actions>
  13. <script location="component://portal/webapp/portal/WEB-INF/actions/returnOrder/listReturnOrder.groovy"/>
  14. </row-actions>
  15. <field name="returnId" title="退货单号"><display/></field>
  16. <field name="createdStamp" title="申请时间" sort-field="true"><display/></field>
  17. <field name="orderId" title="原订单号">
  18. <display/>
  19. </field>
  20. <field name="fromPartyId" title="申请人">
  21. <display/>
  22. </field>
  23. <field name="totalPrice" title="总金额">
  24. <display/>
  25. </field>
  26. <field name="statusId" title="退货单状态" sort-field="true">
  27. <display-entity entity-name="StatusItem" key-field-name="statusId" description="${description}"/>
  28. </field>
  29. <field name="backLink" title="退回" widget-style="buttontext" use-when="&quot;RETURN_REQUESTED&quot;.equals(statusId)">
  30. <hyperlink target="backReturnOrder" description="退回" confirmation-message="确认要退回该退货单?">
  31. <parameter param-name="returnId"/>
  32. </hyperlink>
  33. </field>
  34. <field name="acceptLink" title="审核" widget-style="buttontext" use-when="&quot;RETURN_REQUESTED&quot;.equals(statusId)">
  35. <hyperlink target="acceptReturnOrder" description="审核" confirmation-message="确认提交审核?">
  36. <parameter param-name="returnId"/>
  37. </hyperlink>
  38. </field>
  39. <field name="viewLink" title="查看" widget-style="buttontext">
  40. <hyperlink target="viewReturnOrder" description="查看">
  41. <parameter param-name="returnId"/>
  42. <parameter param-name="orderId"/>
  43. </hyperlink>
  44. </field>
  45. </form>

上面的代码是列表List的代码,需要注意的点是 list-name 的属性一定要是listlt 才行, performFindList 因为这个服务调用的org.ofbiz.common.FindServices类里面的performFindList实现方法,在这个方法里面,是获取reslut名称为listLt的数据的,个人感觉这里面的确不合理,但是既然ofbiz这样做了,一定有它自己的道理,这里就不深究了。然后在讲一下这边的按钮,这三个按钮的话,如果想在同一列里面,就需要自己去写jquery去实现列的整合。这种简单的操作(主要不属于ofbiz的内容)我就不再贴出代码了。

下面在介绍一个List里面存在的标签

  1. <alt-target use-when="contactListParty==null" target="createContactListParty"/>

这个标签多数用于编辑与新增的form里面,是用来判断对象是否存在的,如果对象不存在的情况下,就修改form的target属性。  

 

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

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

    配置内容分析如下 # -- 定义上下文使用者 -- security.context =default # -- 定义密码限制长度最小值 -- password.length.min =5 # -- ...

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

    文件内容如下 unique.instanceId=ofbiz1     #--为JobManger方法提供实例的ID(必须小于20个字符)    currency.uom.id.default=USD ...

  3. 第三百八十四节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置以及会员注册

    第三百八十四节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置以及会员注册 基于类的路由映射 from django.conf.urls import url, incl ...

  4. (四)EasyUI 使用——form表单2 & window窗口

    form表单组件主要有以下内容(如下图)      6. progressbar进度条  每隔1秒让进度条按随机数填充,直至充满进度条刻度(只能执行一次) 进度条: <div id=" ...

  5. android内部培训视频_第四节(1)_异步网络操作

    第四节(1):异步网络操作  一.结合asyncTask下载网络图片 1.定义下载类,继承自asyncTask,参数分别为:String(url地址),Integer(刻度,本例没有用到),BitMa ...

  6. Centos7 install Openstack - (第四节)添加计算服务(Nova)

    Centos7 install Openstack - (第四节)添加计算服务(Nova) 我的blog地址:http://www.cnblogs.com/caoguo 该文根据openstack官方 ...

  7. 第四节,Linux基础命令

    第四节,Linux基础命令 命令是系统操作员对系统传入的指令,传入指令后回车,系统接收到指令做出相应的行为 1.查看用户位于系统什么位置 [pmd]检查操作用户位于系统的什么位置 命令         ...

  8. VUE2.0实现购物车和地址选配功能学习第四节

    第四节 v-on实现金额动态计算 用¥金额 进行格式处理,可以使用原生js进行转换,但是在vuei,使用filter过滤器更加方便 注: 1.es6语法=>和import等 好处在于res参数后 ...

  9. delphi 线程教学第四节:多线程类的改进

    第四节:多线程类的改进   1.需要改进的地方   a) 让线程类结束时不自动释放,以便符合 delphi 的用法.即 FreeOnTerminate:=false; b) 改造 Create 的参数 ...

随机推荐

  1. 国家发改委发布的数据,前三季度我国生产的手机、PC、集成电路、宽带上网的数量

    集微网消息,根据国家发改委发布的数据,前三季度,我国生产集成电路944亿块,同比增长18.2%. 此外,前三季度,生产手机15亿部,同比增长17.6%,其中智能手机11亿部,增长12.1%,占全部手机 ...

  2. Mars 是微信官方的终端基础组件,是一个使用 C++ 编写的业平台性无关的基础组件

    http://www.oschina.net/p/wechat-mars http://www.oschina.net/news/80453/wewechat-open-source-plan

  3. C++ 安全字符串拼接

    #include <stdio.h> #include <stdint.h> #include <stdarg.h> #if defined(__GNUC__) # ...

  4. ArcGIS API for Silverlight 之ElementLayer使用及TextSymbol的模板使用

    原文:ArcGIS API for Silverlight 之ElementLayer使用及TextSymbol的模板使用 在开发中动态在地图上添加文字信息,可以使用TextSymbol添加文字 // ...

  5. linux root不能用

    在操作查看vi /etc/passwd 查看用户信息时,不小心修改了root的用户名改成了eoot,这样在切换到普通用户后,就切不回root,即使明明知道用户名是eoot,也知道原来的root密码,但 ...

  6. hdu1045 Fire Net

    在一张地图上建立碉堡(X),要求每行没列不能放两个,除非中间有强挡着.求最多能放多少个碉堡 #include<iostream> #include<cstdio> #inclu ...

  7. iOS:访问地址薄

    地址簿的访问 介绍: 地址簿(Address Book)是一个共享的联系人信息数据库.任何iOS应用程序都可以使用.通过提供常用联系人信息,而不是让每一个应用程序管理独立的联系人列表,可改善用户体验. ...

  8. 微信支付开发(11) Native支付

    关键字:微信公众平台 微信支付 Native原生支付作者:方倍工作室原文:http://www.cnblogs.com/txw1958/p/wxpay-native.html 由于微信支付接口更新,本 ...

  9. 发送xml或json格式的数据给服务器

    后台通过context.Request.InputStream来接收 #region 发送消息 + void SendMessage() /// <summary> /// 发送消息 // ...

  10. Token的管理

    代码: RedisCommon using System; using System.Collections.Generic; using System.Linq; using System.Text ...