Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
部门后台框架
Search
cssrain
September 02, 2014
Technology
270
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
部门后台框架
部门后台框架
cssrain
September 02, 2014
More Decks by cssrain
See All by cssrain
UED工作流程分享和交流
cssrain
1
560
解读HTML
cssrain
0
240
解读HTML5
cssrain
2
240
基础CSS(1)
cssrain
0
240
基础CSS(2)
cssrain
0
180
高效的CSS
cssrain
0
230
高级CSS—继承
cssrain
0
200
PhoneGap分享和交流
cssrain
0
180
PhoneGap实践
cssrain
0
130
Other Decks in Technology
See All in Technology
Kiro アップデート 2026 年 11 月号 (11 月 8 日時点) | 目指せ Kiro マスター アップデート編
inariku
PRO
2
100
An Introduction to Context Ontology Accelerator (teaching AI agents what your data means)
inariku
PRO
1
200
生成AI時代のIAMのマニアックな話
takuros
6
3k
AI時代の組織作り:チーム開発から「個人×AI」への移行と、持続可能な「開発資本」の築き方
ham0215
2
820
続・ソフトウェアアーキテクトのための意思決定術: Decision Readiness, Revisited — When AI Changes the Economics of Software Architecture
snoozer05
PRO
9
2.9k
AIエージェントの監視、思考を見るか行動を見るか / Monitoring AI Agents: Thoughts or Actions
yusukeshimizu
2
180
長い仕事を任せる (Workflows、クラウドセッション、Kiro Web) | 目指せ Kiro マスター 10
inariku
PRO
3
170
業務でAWSをあまり使っていない私が、AWSへのモチベを保つ方法
smt7174
0
190
複数システムが同居した 15 年物の AWS アカウントを解体するための考古学
wa6sn
3
110
「いつか使う」の「いつか」は来ない 〜AI駆動開発における「作らない」判断について〜
ikki0006
0
190
Content Mapper APIの応用例~CSS Modules、言語ファイル~
uhyo
2
640
AWS基盤改善を支える 私たちの理念と行動指針
kentosuzuki
0
150
Featured
See All Featured
Deep Space Network (abreviated)
tonyrice
0
410
Designing Powerful Visuals for Engaging Learning
tmiket
1
650
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.9k
Technical Leadership for Architectural Decision Making
baasie
4
640
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
43k
Unsuck your backbone
ammeep
672
58k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
Optimising Largest Contentful Paint
csswizardry
37
4k
A designer walks into a library…
pauljervisheath
211
25k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.4k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
2
520
Transcript
项目开发框架分享 --框架一小步,开发一大步 UED分享 · 交流 http://cssrain.github.io
项目框架结构 Broswer、Phone、Pad等终端 系统表结构 客户端 项 目 前 台 模 版
项 目 后 台 模 版 数据库 Request Web Services JSON JSON JDBC 请求参数验证(XML) 代 码 插 件 Action控制类 IControlService 统一调用接口 Action控制类 IControlService 统一调用接口 IControlService Service服务类 Dao操作类 Java Bean InputObject OutputObject 统一调用接口 JSON JSON
Html Filter Interceper Action IControlService Service Dao || tp Converter
IControlService (1) 页面请求 (3) (2) (4) (5) (6) (10) (9) (8) (7) WebService调用 WebService调用 (1) 验证参数个数、顺序、正则表达式 (2) 根据control.xml封装InputObject对象, 存 储在ActionContext中 (3) 获取InputObject对象 (4) 将InputObject对象转成Json (5)将Json转换成InputObject (6)数据处理 (7)封装OutputObject对象 (8)将OutputObject对象转成Json (9) 将Json转换成OutputObject对象 (10) 封装Json 项目框架流程 返回数据,处理完成
<control> <action path="" service="" method=""> <input uid="1" service="" method=""> <parameter
key="" order="" regex="" scope="" toKey=""/> <parameter key="" order="" regex="" scope="" toKey=""/> ……… </input> <output uid="1" convertor="" method=""/> ……… </action> …….. </control> control.xml文件配置
<control>标签 整个应用的控制请求,control.xml的根标签。 control.xml详解 <action>标签 <!ELEMENT control (action+)> 请求动作标签,代表一个请求动作,各请求根据path属性进行区别。
<path>属性: Request请求路径; #REQUIRED <service>属性:Request请求调用后台的WebService服务类,值为后台工程中 spring-services.xml中Service对应的id值; #IMPLIED <method>属性:服务类中的方法; #IMPLIED <input>标签 <!ELEMENT action (input,output?)*> 请求参数标签,<action>中可包含多个<input>标签,各标签通过uid区别。 <uid>属性: 请求的唯一编号; #IMPLIED <service>属性:若填写,则重写父类action属性的service; #IMPLIED <method>属性:若填写,则重写父类action属性的method; #IMPLIED
<parameter>标签 <!ELEMENT input (parameter*)> Request的参数映射标签,参数列表 <key>属性: Request中对应的key; #REQUIRED <toKey>属性:InputObject对象中params属性中的key值;
#IMPLIED <order>属性:参数的顺序,按照验证需求添加; #IMPLIED <regex>属性:正则表达式验证,按照验证需求添加; #IMPLIED <scope>属性: key属性对应值的取值范围; (request|session|constants|properties) #IMPLIED control.xml详解 注意: 1、若scope不配置,则默认为“request”,从前台请求中获取数据; 2、若scope为“session” ,则根据key到session中获取对应值,并以toKey属性的值作为 params的键值存储,key的配置规则为: session中key值[.属性][.属性]; 3、若scope为“constants”,则从com.ai.***.util.Constants.java中读取属性为key的值; 4、若scope为“properties”,则从config/system.properties中读取数据; 5、若toKey属性不配置,则以key为params的键值存储。
control.xml详解 <output>标签 <!ELEMENT action (input,output?)*> 请求返回结果转换标签,output标签通过uid属性和input匹配 <uid>属性: 请求的唯一编号; #REQUIRED
<convertor>属性:Json转换类 ; #REQUIRED <method>属性:调用的方法; #IMPLIED 注意: 1、 output标签是否需要可视Action返回给前台的Json而定; 2、 convertor属性为转换类全称,形如“com.ai.***. convertor.****Convertor”; 3、转换类需要继承com.ai.frame.convertor.BaseConvertor; 4、方法定义: public String XXX(InputObject inputObject , OutputObject outputObject);
InputObject对象 private String service; // 调用后台服务类的名称 private String method; //
服务类中的方法名 private String serverIp; // 调用服务的主机IP private String userId; // 用户信息 private Map<String, String> params; // 参数信息 private List<Map<String, String>> beans; // 参数集 private Map<String, String> logParams ; // 日志参数 // 将params属性转换成JavaBean public <T> T convertParams2Bean(Class<T> clz); // 将beans属性转化成List<JavaBean> public <T> List<T> convertBeans2Beans(Class<T> clz);
InputObject对象获取 从ActionContext中获取 InputObject input= (InputObject) ServletActionContext.getContext().get("inputObject"); 自创建InputObject对象 InputObject inputObject =
new InputObject(); 注意:框架中已对该方法进行封装,在Action中可调用父类BaseAction中的 getInputObject()方法获得。 提醒:创建的inputObject对象中的params、 beans等属性已被实例化,可直接通过 getter方法获取使用。
前后台交互 在前台注入IControlService对象,通过调用 OutputObject execute(InputObject inputObject)完成方法调用。 同样,在基类BaseAction中,已对该方法进行封装,重载了两种方法: OutputObject getOutputObject(); 从ActionContext中读取创建的InputObject对象,作为参数调用后台服务。 OutputObject
getOutputObject(InputObject inputObject); 自创建InputObject对象作为参数,调用后台服务。
public String getWaitCheckByPage(){ String start = getRequest().getParameter("start"); String everyPage =
getRequest().getParameter("limit"); User user = (User)getSession().getAttribute("User"); int userId = user.getId(); InputObject inputObject = new InputObject(); inputObject.setService("mediastoreService"); inputObject.setMethod("getWaitCheckByPage"); Map<String,String> map= new HashMap<String,String>(); map.put("compareName", String.valueOf(userId)); map.put("start", start); map.put("everyPage", everyPage); inputObject.setParams(map); OutputObject outputObject = getControlService().execute(inputObject); String json = JsonDataUtil.getWaitCheckJson(outputObject); sendJson(json); return null; } 使用示例1 当 前 开 发 模 式
public String execute() { OutputObject object = super.getOutputObject(); super.sendJson(super.convertOutputObject2Json(object)); return
null; } <control> <action path="/front/sh/common!execute"> ………. <input uid= "4" service="mediastoreService" method="getWaitCheckByPage"> <parameter key="start" order="0" regex="" toKey="start"/> <parameter key="limit" order= "1" regex="" toKey="everyPage"/> <parameter key="User.id" regex="" scope="session" toKey ="compareName" /> </input> <output uid= "4" convertor="com.ai.mpt.convertor.NoticeConvertor" /> </action> </control> 框 架 模 式
Tools是一个可实现常规代码的自动生成的插件! 代码生成插件Tools 公告表: CREATE TABLE DB_AP_MPT_NOTICE( ID NUMBER NOT NULL,
--公告ID REGION_ID VARCHAR2(2), --归属地市 NAME VARCHAR2(100), --公告名称 CONTENT VARCHAR2(2000), --公告内容 CREATE_OPID VARCHAR2(50), --创建人 CREATE_DATE DATE --创建时间 );
单表操作 后台工程右键选择AILK_TOOLSSingle-Table, 输入数据库Url、用户名、密码 下一步 双击选择需要操作的表,点击确定即完成操作!
文件名称 文件路径 备注 Notice.java java/**/bean/ 创建Bean文件 Notice.xml resources/orm/ 创建Ibatis配置文件 SqlMapConfig.xml
resources/orm/ 修改主配置文件 INoticeDao.java java/**/dao/ 创建Dao接口类 NoticeDaoImpl.java java/**/dao/impl/ 创建Dao接口的实现类 INoticeDaoTest.java test/**/dao/ 创建Dao的测试类 INoticeService.java java/**/service/ 创建Service接口类 NoticeServiceImpl.java java/**/service/impl/ 创建Service接口的实现类 INoticeServiceTest.java test/**/service/ 创建Service的测试类 spring-dao.xml resources/spring/ 修改文件,添加Dao声明 spring-services.xml resources/spring/ 修改文件,添加Service声明 生成文件列表:
多表操作 后台工程中选择AILK_TOOLSMulti-Table,输入SQL、选择Dao、输入方法名、选择是否同 步Service,点击确定即可。 文件名称 文件路径 备注 Notice.xml resources/orm/ 修改Bean的ORM文件 INoticeDao.java
java/**/dao/ Dao中添加声明方法 NoticeDaoImpl.java java/**/dao/impl/ Dao实现类实现该方法 INoticeDaoTest.java test/**/dao/ 测试该方法 INoticeService.java java/**/service/ 不勾选则不生成 NoticeServiceImpl.java java/**/service/impl/ 不勾选则不生成 INoticeServiceTest.java test/**/service/ 不勾选则不生成 生成文件列表:
使用示例2 需求:获取当前登录用户所在地区的公告名称包含“test”的 信息列表。 Region.java int id; String regionName; User.java int
id; String name; Region region; Notice.java int id; String regionId; String name; String content; String createOpid; Date createDate; 假设: session.setAttribute("user",user);
步骤1:使用Tools生成后台服务 SQL: SELECT * FROM DB_AP_FWE_NOTICE N WHERE N.REGION_ID =
#regionId# AND N.NAME LIKE '%' || #name# || '%' 选中的DAO: INoticeDao 方法名: getNoticesByName 同步Service: √
步骤2:配置前台control.xml文件 <control> <action path="/front/sh/common!execute"> ………. <input uid="2" service="noticeService " method="getNoticesByName">
<parameter key= "a" order="0" regex="" toKey="name"/> <parameter key="user.region.id" regex="" scope="session" toKey ="regionId" /> </input> <output uid="2" convertor="com.ai.fwe.convertor.NoticeConvertor" method=“convert2Json" /> </action> </control> 配置output标签,需 自行编写Json转换类
步骤3:编写转换类(如果需要) public class NoticeConvertor extends BaseConvertor { public String convert2Json(InputObject
input, OutputObject output) { String json = "{\"colmodel\":[],\"rows\":"; json += JsonUtil.convertObject2Json(output.getBeans()); json += ",\"total\":"+output.getBean.get("total")+"}"; return json; } } Json工具:JsonView \\192.168.1.217\software\tools
步骤4:前台请求 $.AjaxJson(contextPath+"/front/sh/common! execute?a="+$("#name").val(), dealData); function dealData (state,data){ //处理数据 } common.js
$.extend({ AjaxJson: function(url,callback){ $.ajax({ url:url, type:"post", cache:false, dataType : "json", success:function(data){ callback("success", data); }, error:function(){ callback("error", null); } }); } }); 框架示例 FrameWork Example svn://192.168.1.217/fwe
感谢聆听!!