昨晚快12点的时候看到耀哥回复我附件里面有相应的下载,于是我就下载完就睡了。今早上不到七点起来洗漱完开始着手练习任务。虽然我之前也已经自己在网上下载到耀哥去年上传的那两压缩包,但是比较发现昨晚下载的那个版本文件最小,我想那这个版本应该是最轻量级的吧,所以就干脆拿这个版本以CmsRegister为例做ofbiz的CRUD练习演示。
下面是我的步骤:
1.下载附件并解压,删除__MACOSX目录(猜想应该是MAC操作系统里面的),保留cmsbackend文件夹
2.将cmsbackend文件夹拷贝到之前搭建好的ofbiz环境中的specialpurpose目录下
3.展开cmsbackend目录,选择src目录,点击右键Build Path-->User As Source Folder
4.打开specialpurpose目录下的component-load.xml,在component-loader节点后面添加一行<load-component component-location="cmsbackend"/>将cmsbackend组件挂上,这样下次再load-demo的时候实体引擎就会解析该组件下的实体创建表并将种子数据加入到数据库表中
5.打开cmsbackend\entitydef\entitymodel.xml,在最下方添加实体定义代码,内容如下:
<entity entity-name="CmsRegister" packge-name="org.ofbiz.cms.register" title="CmsRegister Entity">
<field name="id" type="id-ne"></field>
<field name="username" type="name"></field>
<field name="realname" type="name"></field>
<field name="email" type="name"></field>
<field name="description" type="very-long"></field>
<prim-key field="id"/>
</entity>
6.在cmsbackend目录下的config目录下新建CmsRegisterUILabels.xml用于控制UI的title属性,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<property key="CmsRegister">
<value xml:lang="en">register</value>
<value xml:lang="zh">注册管理</value>
</property>
<property key="CmsRegisterId">
<value xml:lang="en">id</value>
<value xml:lang="zh">注册ID</value>
</property>
<property key="CmsRegisterUsername">
<value xml:lang="en">username</value>
<value xml:lang="zh">用户名</value>
</property>
<property key="CmsRegisterRealname">
<value xml:lang="en">realname</value>
<value xml:lang="zh">真实姓名</value>
</property>
<property key="CmsRegisterEmail">
<value xml:lang="en">email</value>
<value xml:lang="zh">电子邮箱</value>
</property>
<property key="CmsRegisterDescription">
<value xml:lang="en">description</value>
<value xml:lang="zh">自我介绍</value>
</property>
<property key="CmsRegisterCreate">
<value xml:lang="en">create</value>
<value xml:lang="zh">新建</value>
</property>
</resource>
7.在cmsbackend\widget\CommonScreens.xml下的main-decorator节点中注入CmsRegisterUiLabels,即<property-map resource="CmsRegisterUiLabels" map-name="uiLabelMap" global="true"/>
8.在CmsBackendMenus.xml文件中添加“注册管理”的菜单项,即
<menu-item name="register" title="${uiLabelMap.CmsRegister}">
<link target="FindCmsRegister" />
</menu-item>
9.根据菜单“注册管理”的链接FindCmsRegister找到cmsbackend应用下的controller.xml配置文件,给其中添加相应的配置
<request-map uri="FindCmsRegister">
<security https="true" auth="true"/>
<response name="success" type="view" value="FindCmsRegister"/>
</request-map>
<view-map name="FindCmsRegister" type="screen" page="component://cmsbackend/widget/CmsBackendScreens.xml#FindCmsRegister"/>
10.在cmsbackend\widget\CmsBackendScreens.xml中添加一个name="FindCmsRegister"的screen,内容如下:
<screen name="FindCmsRegister">
<section>
<actions>
<set field="headerItem" value="CmsRegister"/>
<set field="titleProperty" value="CmsRegister"/>
<set field="pCtx" from-field="parameters"/>
</actions>
<widgets>
<decorator-screen name="CmsBackendCommonDecorator" location="${parameters.mainDecoratorLocation}">
<decorator-section name="body">
<decorator-screen name="FindScreenDecorator" location="component://common/widget/CommonScreens.xml">
<decorator-section name="menu-bar">
<container style="button-bar">
<link target="EditCmsRegister" link-type="anchor" text="${uiLabelMap.CmsRegisterEdit}" style="buttontext create"/>
</container>
</decorator-section>
<decorator-section name="search-options">
<include-form name="FindCmsRegister" location="component://cmsbackend/widget/CmsBackendForms.xml"/>
</decorator-section>
<decorator-section name="search-results">
<include-form name="ListCmsRegister" location="component://cmsbackend/widget/CmsBackendForms.xml"/>
</decorator-section>
</decorator-screen>
</decorator-section>
</decorator-screen>
</widgets>
</section>
</screen>
11.上一步中涉及到注入CmsBackendForms.xml中两个表单,一个用于条件查询,一个用于列表展示,内容如下:
<!--用于查询的表单-->
<form name="FindCmsRegister" type="single" target="FindCmsRegister" default-entity-name="CmsRegister">
<field name="noConditionFind"><hidden value="Y"/></field>
<field name="username" title="${uiLabelMap.CmsRegisterUsername}" >
<text-find hide-options="true"/>
</field>
<field name="realname" title="${uiLabelMap.CmsRegisterRealname}" >
<text-find hide-options="true"/>
</field>
<field name="email" title="${uiLabelMap.CmsRegisterEmail}" >
<text-find hide-options="true"/>
</field>
<field name="description" title="${uiLabelMap.CmsRegisterDescription}" >
<text-find hide-options="true"/>
</field>
<field name="searchButton" title="${uiLabelMap.CommonFind}" widget-style="smallSubmit">
<submit button-type="button"/>
</field>
</form>
<!--用于列表展示的表单-->
<form name="ListCmsRegister" type="list" list-name="listIt" paginate-target="FindCmsRegister" default-entity-name="CmsRegister" separate-columns="true"
odd-row-style="alternate-row" header-row-style="header-row-2" default-table-style="basic-table hover-bar">
<actions>
<service service-name="performFind" result-map="result" result-map-list="listIt">
<field-map field-name="inputFields" from-field="pCtx"/>
<field-map field-name="entityName" value="CmsRegister"/>
<field-map field-name="orderBy" from-field="parameters.sortField"/>
<field-map field-name="viewIndex" from-field="viewIndex"/>
<field-map field-name="viewSize" from-field="viewSize"/>
</service>
</actions>
<field name="id" title="${uiLabelMap.CmsRegisterId}" sort-field="true">
<display/>
</field>
<field name="username" title="${uiLabelMap.CmsRegisterUsername}" sort-field="true">
<display/>
</field>
<field name="realname" title="${uiLabelMap.CmsRegisterRealname}" sort-field="true">
<display/>
</field>
<field name="email" title="${uiLabelMap.CmsRegisterEmail}" sort-field="true">
<display/>
</field>
<field name="edit" title="${uiLabelMap.CommonEdit}">
<hyperlink also-hidden="false" description="${uiLabelMap.CommonEdit}" target="EditCmsRegister">
<parameter param-name="id"/>
</hyperlink>
</field>
<field name="delete" title="${uiLabelMap.CommonDelete}">
<hyperlink also-hidden="false" description="${uiLabelMap.CommonDelete}" target="deleteCmsRegister">
<parameter param-name="id"/>
</hyperlink>
</field>
</form>
说明:查询功能室借助ofbiz自带的查询功能来实现的,在ListCmsRegister表单中的<actions>中注入ofbiz自带的service
12.为了实现表单页面的充分利用让创建和修改公用同一个表单,在CmsBackendForms.xml中添加表单,内容如下:
<form name="EditCmsRegister" type="single" target="updateCmsRegister" title="" default-map-name="entity" default-entity-name="CmsRegister">
<alt-target use-when="entity==null" target="createCmsRegister"/>
<field name="id" title="${uiLabelMap.CmsRegisterId}" required-field="true" widget-style="required">
<text/>
</field>
<field name="username" title="${uiLabelMap.CmsRegisterUsername}" required-field="true" widget-style="required">
<text/>
</field>
<field name="realname" title="${uiLabelMap.CmsRegisterRealname}" required-field="true" widget-style="required">
<text/>
</field>
<field name="email" title="${uiLabelMap.CmsRegisterEmail}" >
<text/>
</field>
<field name="description" title="${uiLabelMap.CmsRegisterDescription}" >
<textarea />
</field>
<field name="submitButton" use-when="entity==null" title="${uiLabelMap.CommonCreate}"><submit button-type="button"/></field>
<field name="submitButton" use-when="entity!=null" title="${uiLabelMap.CommonUpdate}"><submit button-type="button"/></field>
</form>
13.删除的话就不用表单了,接下来需要做的就是在cmsbackend应用下的controller.xml配置文件中为相应的请求资源路径注入配置,内容如下:
<request-map uri="EditCmsRegister"><security https="true" auth="true"/><response name="success" type="view" value="EditCmsRegister"/></request-map>
<request-map uri="createCmsRegister">
<event type="service" invoke="createCmsRegister"/>
<response name="success" type="request-redirect-noparam" value="FindCmsRegister"></response>
</request-map>
<request-map uri="updateCmsRegister">
<event type="service" invoke="updateCmsRegister"/>
<response name="success" type="request-redirect" value="FindCmsRegister">
</response>
</request-map>
<request-map uri="deleteCmsRegister">
<event type="service" invoke="deleteCmsRegister"/>
<response name="success" type="request-redirect-noparam" value="FindCmsRegister"></response>
</request-map>
<view-map name="EditCmsRegister" type="screen" page="component://cmsbackend/widget/CmsBackendScreens.xml#EditCmsRegister"/>
14.在CmsBackendScreens.xml配置文件中添加一个name="EditCmsRegister"的screen,内容如下:
<screen name="EditCmsRegister">
<section>
<actions>
<set field="titleProperty" value="CmsRegister"/>
<set field="tabButtonItem" value="CmsRegister"/>
<entity-one entity-name="CmsRegister" value-field="entity"/>
</actions>
<widgets>
<decorator-screen name="CmsBackendCommonDecorator" location="${parameters.mainDecoratorLocation}">
<decorator-section name="body">
<include-form name="EditCmsRegister" location="component://cmsbackend/widget/CmsBackendForms.xml"/>
</decorator-section>
</decorator-screen>
</widgets>
</section>
</screen>
15.在cmsbackend应用下的servicedef目录中为services.xml配置文件配置相应的服务,内容如下:
<service name="createCmsRegister" default-entity-name="CmsRegister" engine="simple" location="component://cmsbackend/script/org/ofbiz/cmsbackend/CmsBackendServices.xml" invoke="createCmsRegister" auth="true">
<description>Create a CmsRegisterEvents</description>
<auto-attributes include="pk" mode="IN" optional="false"/>
<auto-attributes include="nonpk" mode="IN" optional="true"/>
</service>
<service name="deleteCmsRegister" default-entity-name="CmsRegister" engine="simple" location="component://cmsbackend/script/org/ofbiz/cmsbackend/CmsBackendServices.xml" invoke="deleteCmsRegister" auth="true">
<description>Delete a CmsRegisterEvents</description>
<auto-attributes include="pk" mode="IN" optional="false"/>
</service>
<service name="updateCmsRegister" default-entity-name="CmsRegister" engine="simple" location="component://cmsbackend/script/org/ofbiz/cmsbackend/CmsBackendServices.xml" invoke="updateCmsRegister" auth="true">
<description>Update a CmsRegisterEvents</description>
<auto-attributes include="pk" mode="IN" optional="false"/>
<auto-attributes include="nonpk" mode="IN" optional="true"/>
</service>
16.根据每个服务的location找到相对应的CmsBackendServices.xml配置文件,并在其中根据相应调用的方法名添加相应的服务,内容如下:
<simple-method method-name="createCmsRegister" short-description="" login-required="true">
<make-value entity-name="CmsRegister" value-field="newEntity" />
<sequenced-id sequence-name="CmsRegister" field="newEntity.id"/>
<set-nonpk-fields map="parameters" value-field="newEntity"/>
<create-value value-field="newEntity"/>
</simple-method>
<simple-method method-name="updateCmsRegister" short-description="" login-required="true">
<entity-one entity-name="CmsRegister" value-field="newEntity"><field-map field-name="id" from-field="parameters.id"/></entity-one>
<set-nonpk-fields map="parameters" value-field="newEntity"/>
<store-value value-field="newEntity"/>
</simple-method>
<simple-method method-name="deleteCmsRegister" short-description="" login-required="true">
<entity-one entity-name="CmsRegister" value-field="newEntity"><field-map field-name="id" from-field="parameters.id"/></entity-one>
<remove-value value-field="newEntity"/>
</simple-method>
17.将整个ofbiz的build.xml文件拖到ant窗口中,clean-all --> load-demo --> start
18.在浏览器中输入http://localhost:8080/cmsbackend
说明:以上这些步骤中涉及的代码大部分都是模仿example组件中的思路而弄得,所以大部分都是复制粘贴而来,时间也仅仅用了一个多小时就搞定了,接下来我会亲自用手写的方式做第二个版本,相信思路会更清晰,效率会更高些。
相关推荐
c语言学习
人脸识别项目源码实战
人脸识别项目源码实战
本图书进销存管理系统管理员功能有个人中心,用户管理,图书类型管理,进货订单管理,商品退货管理,批销订单管理,图书信息管理,客户信息管理,供应商管理,库存分析管理,收入金额管理,应收金额管理,我的收藏管理。 用户功能有个人中心,图书类型管理,进货订单管理,商品退货管理,批销订单管理,图书信息管理,客户信息管理,供应商管理,库存分析管理,收入金额管理,应收金额管理。因而具有一定的实用性。 本站是一个B/S模式系统,采用Spring Boot框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得图书进销存管理系统管理工作系统化、规范化。本系统的使用使管理人员从繁重的工作中解脱出来,实现无纸化办公,能够有效的提高图书进销存管理系统管理效率。 关键词:图书进销存管理系统;Spring Boot框架;MYSQL数据库
基于动态规划和模型预测控制的并联混合电动汽车最佳控制 简介:利用动态规划,使用模型预测控制,实现对并联混合动力电动汽车的最佳控制,并降低总体成本函数 使用动态规划可以实现混合动力电动汽车的优化控制 混合动力电动汽车的模型预测控制是通过使用动态规划在缩短的时域内实现的 代码为纯matlab脚本,附带说明电子文档 ,并联混合电动汽车; 动态规划; 模型预测控制; 最佳控制; 总体成本函数; Matlab脚本。,动态规划与模型预测控制在并联混合动力电动汽车的最优控制策略
人脸识别项目实战
2025 DeepSeek技术全景解析-重塑全球AI生态的中国力量.pdf
能够爬取非会员视频和音频资源,可通过ffmpeg等工具将视频资源和音频资源合并
基于差分进化算法DE的机器人路径规划 本产品基于优化的差分进化算法,专为机器人山地路径规划而设计 通过模拟差分进化过程中的变异、交叉与选择机制,算法能够智能探索并确定最优行进路线,全面考量路径长度、能量消耗及地形适应性 优化之处在于融合了动态差分权重与精英保留策略,显著增强了算法的搜索效率和求解质量,有效规避了早熟收敛的风险 该算法在山地这一复杂且多变的自然环境中展现出卓越性能,完美适配于机器人探险、山地救援、环境监测等多种应用场景 我们矢志为用户提供卓越、稳健的机器人路径规划方案,推动各类山地作业迈向更为精确与高效的路径规划新时代 ,差分进化算法DE; 机器人路径规划; 山地路径规划; 算法优化; 早熟收敛风险规避; 山地探险应用场景; 环境监测场景。,DE算法赋能机器人,优化山地路径规划方案
情侣游戏情侣飞行棋10元真心话大冒险情侣情趣骰子php源码 ----- 程序特色 ----- 1、完整的分销制度,可自定义多种不同的返佣比例 2、支持情侣飞行棋、情趣骰子,多种等级 3、无感微信自动授权登录,支持微信第三方授权登录 4、完全开源无加密
HeidiSQL的12.2.0.6576安装压缩包
监护人,小孩和玩具数据集 4647张原始图片 监护人 食物 孩子 玩具 精确率可达85.4% yolov5pytorch格式
本课程是 PHP 进阶系列之 Swoole 入门精讲,系统讲解 Swoole 在 PHP 高性能开发中的应用,涵盖 协程、异步编程、WebSocket、TCP/UDP 通信、任务投递、定时器等核心功能。通过理论解析和实战案例相结合,帮助开发者掌握 Swoole 的基本使用方法及其在高并发场景下的应用。 适用人群: 适合 有一定 PHP 基础的开发者、希望提升后端性能优化能力的工程师,以及 对高并发、异步编程感兴趣的学习者。 能学到什么: 掌握 Swoole 基础——理解 Swoole 的核心概念,如协程、异步编程、事件驱动等。 高并发处理——学习如何使用 Swoole 构建高并发的 Web 服务器、TCP/UDP 服务器。 实战项目经验——通过案例实践,掌握 Swoole 在 WebSocket、消息队列、微服务等场景的应用。 阅读建议: 建议先掌握 PHP 基础,了解 HTTP 服务器和并发处理相关概念。学习过程中,结合 官方文档和实际项目 进行实践,加深理解,逐步提升 Swoole 开发能力。
机器人先进视觉赛-基于深度学习yolov8的3D识别项目源码含gui界面(最新发布).zip 实现机器人的3D目标识别和分割功能 支持深度图像的处理和分析 【资源详情说明】 【1】该项目为近期精心打造开发,完整代码。同时,配套资料一应俱全,涵盖详细的设计文档 【2】项目上传前源码经过严格测试,在多种环境下均能稳定运行,功能完善且稳定运行,技术研究、教学演示还是项目实践,都能轻松复现,节省时间和精力。 【3】本项目面向计算机相关专业领域的各类人群,对于高校学生,可作为毕业设计、课程设计、日常作业的优质参考;对于科研工作者和行业从业者,可作为项目初期立项演示,助力快速搭建原型,验证思路。 【4】若具备一定技术基础,可在此代码上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 【5】小白,在配置环境或运行项目时遇到困难,可提供远程指导和全方位技术支持。 欢迎下载学习本项目资源,期待与你共同探讨技术问题,交流项目经验!
Matlab实现TSO-XGBoost多变量回归预测 Matlab实现TSO-XGBoost多变量回归预测,金枪鱼算法优化XGBoost多变量回归预测 1.data为数据集,7个输入特征,1个输出特征 2.MainTSO XGboost.m为主程序文件,其他为函数文件,无需运行 3.命令窗口输出R2、MAE、MAE和RMSEP等评价指标,可在下载区获取数据和程序内容 注意程序和数据放在一个文件夹,文件夹不可以XGBoost命名,因为有函数已经用过,运行环境为 Matlab2018及以上,预测效果如下 ,TSO-XGBoost; 多变量回归预测; Matlab实现; 金枪鱼算法优化; 评价指标; 预测效果; 文件夹结构; 运行环境,Matlab中TSO-XGBoost多变量回归预测优化实践
实时音视频SRT协议中文完整版
学习WiFi,入手资料
c语言学习
jl5104开发板的代码,sdk