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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
cssrain
September 02, 2014
Technology
250
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
540
解读HTML
cssrain
0
220
解读HTML5
cssrain
2
230
基础CSS(1)
cssrain
0
220
基础CSS(2)
cssrain
0
160
高效的CSS
cssrain
0
220
高级CSS—继承
cssrain
0
190
PhoneGap分享和交流
cssrain
0
160
PhoneGap实践
cssrain
0
110
Other Decks in Technology
See All in Technology
AI時代のPRレビューにどう向き合うか?
kairim0
1
240
二歩目のフロントエンド・ウェブアクセシビリティ
camiha
2
650
事業成長とデータ活用を止めないためのマネジメントへ挑戦
hiracky16
0
400
Refining Active Record
shugo
0
160
専門領域のAIをどう評価するか
bengo4com
2
270
USB PDを使ってスマホを労わりたい
raspython3
0
180
スプシの手作業からの解脱 ~更新はClaude Codeに、見せ方と使い方はGASアプリに任せる~
kentarofujii
0
160
自作バイナリを動かす「入口」8選
puhitaku
2
1.3k
パッチ更新でterraform initが落ちた日
grimoh
1
140
DevelopersIO 2026 知識の地図を描く ─ オントロジーとは何か?
ishikawa_satoru
1
1.7k
Webの常識が通じないHTMLメールのダークモード
teamlab
PRO
0
130
日本語に強いオープンな大規模言語モデル「LLM-jp」
odashi
5
1.1k
Featured
See All Featured
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
1k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
59k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.3k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.2k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
590
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
540
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
760
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
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
感谢聆听!!