`

ofbiz的form网下资料总结

 
阅读更多

ofbiz form中下拉列表的代码 
• <field name="agreementTypeId" 
title="${uiLabelMap.AccountingAgreementTypeId}"> 
<drop-down allow-empty="true"> 
<entity-options 
description="${description}" 
entity-name="AgreementType" 
key-field-name="agreementTypeId"/> 
</drop-down> 
</field> 
以上是在form中显示下拉列表的代码示例,title是下拉列表前的说明文字,entity-name是下拉列表表项的取值实体,description是下拉列表显示的表项,此处,下拉列表的表项从实体AgreementType中的description域取值.另外,标签中的allow-empty如果为ture则允许该下拉菜单为空,如果为false则必须在下拉列表中选择其一. 

OFBIZ FORM表头汉化示例 
• <form name="ContactList" type="list" list- name="allContacts"> 
<auto-fields-entity entity-name="Contact" default-field-type="display"/> 
<field name="contactId" title="联系人ID"></field> 
<field name="name" title="姓名"></field> 
<field name="duty" title="职位"></field> 
<field name="responsibility" title="职责"></field> 
<field name="corporation" title="单位"></field> 
<field name="email" title="E-mail"></field> 
<field name="tel" title="电话"></field> 
<field name="msn" title="MSN"></field> 
<field name="qq" title="QQ"></field> 
</form> 
首先, <auto-fields-entity entity-name="Contact" default-field-type="display"/> 先将实体Contact的所有域取出来,如果下面不对各域作具体指定则直接根据display的格式显示各域.其次,下面的每一个条<field name="contactId" title="联系人ID"></field>语句都将对应域的表头进行汉化. 


ofbiz form中不显示实体某域的代码 
• 在用<auto-fields-entity entity-name="Contact" default-field-type="display"/>读出实体的所有域后用<field name="...." title="...."><hidden/></field>指定具体的隐藏域即可. 


ofbiz查找功能关键代码 
• 其中FindTest表单是用于输入查询条件的表单,ResultTest表单是用于显示查询结果的表单.两张表单在同一页面上显示.其中,Test是实体名. 
<form name="FindTest" target="main" type="single"> 
<auto-fields-entity entity-name="Test" default-field-type="find"/> 
<field name="submitButton" title="查找" widget-style="smallSubmit"> 
<submit button-type="button"/> 
</field> 
</form> 

<form name="ResultTest" list-iterator-name="listIt" target="" paginate-target="main" title="" type="list"> 
<actions> 
<set field="entityName" value="Test"/> 
<service service-name="performFind" result-map-name="result" result-map-list-iterator-name="listIt"> 
<field-map field-name="inputFields" env-name="requestParameters"/> 
<field-map field-name="entityName" env-name="entityName"/> 
</service> 
</actions> 
<auto-fields-entity entity-name="Test" default-field-type="display"/> 
</form> 

小结: 
查询功能不需要minilanguage或java来实现.输入查询条件的表单type为single,target指向的是当前页面,auto-fields-entity元素的type为find. 
显示查询结果的表单比较特别,该表单中有<action>部分,其中的代码就是实现查询功能的代码,具体使用时修改实体名即可.和其它表单一样,可以指定具体域有特殊的显示效果或隐藏. 



如何基于ofbiz在页面中显示一张数据库表(利昂原创) 
• (备注:要看懂该文章必须具备OFBIZ的基础知识。) 

关键代码1:在widget的screen中,action部分用<entity-condition 标签指定实体名和实体列表名; 
关键代码2:在widget的screen中,widgets部分用<include-form 标签指定被引用表单的位置和表单名; 
<screen name="guestbook"> 
<section> 
<actions> 
<!-- find HelloPerson by condition. since there is no conditions, all values of HelloPerson are returned in allGuests --> 
<entity-condition entity-name="HelloPerson" list-name="allGuests"><order-by field-name="helloPersonId"/></entity-condition> 
<!--窗口中调用的表单用到的实体数据在该处指出!!如果该句设置得不对表单中将不显示数据!!!-->
</actions> 
<widgets> 
<decorator-screen name="CommonDecorator"> 
<decorator-section name="body"> 
<label>我们的客人和他们说的话</label> <!-- a label/header --> 
<!-- use this form directly, instead of going through a Freemarker template again --> 
<include-form name="GuestbookList" location="component://hello3/webapp/hello3/guestbook/GuestbookForms.xml"/> 

</decorator-section> 
</decorator-screen> 
</widgets> 
</section> 
</screen> 

关键代码3:在表单文件内的对应(上面的<include-form 标签指出的表单名)的表单代码处,<form 标签的type要设成list,list-name要和widget中窗口中的action部分的列表名一致。 
<form name="GuestbookList" type="list" list-name="allGuests"> 
<!-- 该处的列表名和widget的窗口action中指定的列表名要对应!this form just lists all the values of allGuests --> 
<auto-fields-entity entity-name="HelloPerson" default-field-type="display"/> 
<!-- 自动显示指定实体的所有域automatically display all fields from HelloPerson --> 
</form> 

总体思路就是:form根据实体定义创建表头,action里的entity condition根据条件从数据库中取出数据显示于表中,这就完成了在页面上显示数据库表的过程。

分享到:
评论
Global site tag (gtag.js) - Google Analytics