二次开发文档_第1页
二次开发文档_第2页
二次开发文档_第3页
二次开发文档_第4页
二次开发文档_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Jspxcms无侵入式插件开发(二次开发)教程之一:概述Jspxcms支持无侵入式插件和二次开发,无需修改系统原有代码,即可无缝整合Entity、Service、Controller、功能菜单、权限、标签、国际化等功能。系统中“插件-简历管理”就是以这种方式实现的,下面就以“简历管理”讲解Jspxcms插件和二次开发的方法。本帖隐藏的内容需要回复才可以浏览配置文件位置:/WEB-INF/conf/plugin。所有的配置文件都必须在这个目录,在该目录下的配置文件会自动加载。在该目录下新建自己的文件夹,可以是任何名字,如:abc、novel等,本例为plug。即/WEB-INF/conf/plu

2、gin/plug配置文件说明perties:功能菜单、权限、国际化、Entity都与这个文件相关。context-dao.xml:Dao的加载。context-service.xml:Service的加载。controller-back.xml:后台Controller的加载。controller-fore.xml:前台Controller的加载。context-directive.xml:标签的加载。其他与插件开发相关的文件目录/WEB-INF/messages/plugin/plug:后台国际化文件位置/WEB-INF/messages/plugin/plug

3、fore:前台国际化文件位置/WEB-INF/views/plug:后台jsp文件位置/files/1/bluewise/plug_resume.html:插件的前台模版插件源代码包名:com.jspxcms.plugJspxcms无侵入式插件开发(二次开发)教程之二:菜单与权限本帖隐藏的内容需要回复才可以浏览菜单和权限配置文件:/WEB-INF/conf/plugin/plug/perties一级菜单配置(分号为分割符)1. menu.650=navigation.plug;nav.do?menuId=650;nav_plug复制代码650:是后台导航一级菜单的

4、编号,编号大小决定菜单的前后位置。其值可以根据需要调整,如330、970,但不要与系统菜单或其他插件菜单重复。系统菜单通常为menu.100,menu.200,menu.600等,系统菜单定义文件在/WEB-INF/conf/pertiesnavigation.plug:菜单名称。这里使用了国际化,也可以直接用中文,比如“我的插件”。nav.do?menuId=650:菜单链接地址。其中650需与前面的值一样。nav_plug:权限值。其中plug通常与配置文件目录名称一样。如目录为abc,则应为nav_abc。也可不一样,但不能与其他一级菜单权限名称一样。二级菜

5、单配置(分号为分割符)1. menu.650.100=resume.management;plug/resume/list.do;plug:resume:list;createplug:resume:create;copyplug:resume:copy;editplug:resume:edit;saveplug:resume:save;updateplug:resume:update;deleteplug:resume:delete复制代码650:二级菜单所属的一级菜单编号。100:二级菜单编号。其值的意义和一级菜单编号一样,用于确定二级菜单的前后位置。resume.management:二

6、级菜单名称。可以直接用中文,如“小说管理”。plug/resume/list.do:功能菜单的链接地址。需与Controller中的地址对应,否则会找不到页面。plug:resume:list:功能菜单的权限。需与Controller中list方法的权限对应,否则会报没有权限。createplug:resume:create:新增按钮的权限值。其中create是国际化,可以用直接用中文,如“新增plug:resume:create”。其中plug:resume:create是该按钮的权限值,需与Controller中对应的create方法权限值一致。copyplug:resume:copy:意

7、义和上面一样,后面的以此类推。com.jspxcms.plug.web.back.ResumeController代码片段1. package com.jspxcms.plug.web.back;2. Controller3. RequestMapping("/plug/resume")4. public class ResumeController 5.         RequiresPermissions("plug:resume:list")6.         Re

8、questMapping("list.do")7.         public String list(.) 8.                 .9.         10.11.         RequiresPermissions("plug:resume:create")12.         Reque

9、stMapping("create.do")13.         public String create(.) 14.                 .15.         16.         .17. Jspxcms无侵入式插件开发(二次开发)教程之三:Entity本帖隐藏的内容需要回复才可以浏览实体类Entity配置文件:/WEB-INF/conf/plugin

10、/plug/perties1. entityManagerFactory.packagesToScan.plug=com.jspxcms.plug.domain复制代码plug:通常与配置文件所在目录一样,也可不一样,但不能与其他相关配置同名。com.jspxcms.plug.domain:Entity所在包名。不使用主键自增策略,将主键放到数据库中的一个表里。1. create table plug_resume2. (3.    f_resume_id          int n

11、ot null,4.    f_site_id            int not null,5.    f_name               varchar(100) not null comment '姓名',6.    f_post           

12、0;   varchar(100) not null comment '应聘职位',7.    f_creation_date      datetime not null comment '投递日期',8.    f_gender             char(1) not null default 'M' comment '性别',9. 

13、0;  f_birth_date         datetime comment '出生日期',10.    f_mobile             varchar(100) comment '手机',11.    f_email              varchar(

14、100) comment '邮箱',12.    f_expected_salary    int comment '期望薪水',13.    f_education_experience longtext comment '教育经历',14.    f_work_experience    longtext comment '工作经历',15.    f_remark     &#

15、160;       longtext comment '备注',16.    primary key (f_resume_id)17. )18. engine = innodb;19. alter table plug_resume comment '简历表'20. alter table plug_resume add constraint fk_plug_resume_site foreign key (f_site_id)21.       referen

16、ces cms_site (f_site_id) on delete restrict on update restrict;复制代码1. Entity2. Table(name = "plug_resume")3. public class Resume implements java.io.Serializable 4.         private Integer id;5.         6.7.         Id8.   

17、60;     Column(name = "f_resume_id", unique = true, nullable = false)9.         TableGenerator(name = "tg_plug_resume", pkColumnValue = "plug_resume", table = "t_id_table", pkColumnName = "f_table", valueColumnName = &qu

18、ot;f_id_value", initialValue = 1, allocationSize = 1)10.         GeneratedValue(strategy = GenerationType.TABLE, generator = "tg_plug_resume")11.         public Integer getId() 12.                 return t

19、his.id;13.         14.15.         public void setId(Integer id) 16.                 this.id = id;17.         18.         19. 复制代码需注意以下三个值,其中plug_resume为表名:1. name = "tg_plug_r

20、esume", pkColumnValue = "plug_resume"2. generator = "tg_plug_resume"Jspxcms无侵入式插件开发(二次开发)教程之四:Dao本帖隐藏的内容需要回复才可以浏览Dao配置文件:/WEB-INF/conf/plugin/plug/context-dao.xml1. <jpa:repositories base-package="com.jspxcms.plug.repository" 2.     transaction-ma

21、nager-ref="transactionManager" 3.     entity-manager-factory-ref="entityManagerFactory" 4.     factory-class="mon.orm.MyJpaRepositoryFactoryBean" 5.     repository-impl-postfix="Impl">6. </jpa:repositories>

22、复制代码其中com.jspxcms.plug.repository为dao接口所在包。Dao使用了SpringDataJPA技术。SpringDataJPA官网:http:/projects.spring.io/spring-data-jpa/1. package com.jspxcms.plug.repository;2. public interface ResumeDao extends Repository<Resume, Integer>, ResumeDaoPlus 3.         public Page<Resume

23、> findAll(Specification<Resume> spec, Pageable pageable);4.         public List<Resume> findAll(Specification<Resume> spec, Limitable limitable);5.         public Resume findOne(Integer id);6.         public Resume save

24、(Resume bean);7.         public void delete(Resume bean);8. 复制代码ResumeDao接口中的方法不用实现。以下接口中的方法均可放到ResumeDao,且无需实现:1. org.springframework.data.repository. CrudRepository2. org.springframework.data.repository. PagingAndSortingRepository3. org.springframework.data.jpa.repository. JpaR

25、epository4. mon.orm. MyJpaRepository复制代码需要实现的dao方法,放到ResumeDaoPlus接口中。1. package com.jspxcms.plug.repository;2. public interface ResumeDaoPlus 3.         public List<Resume> getList(Integer siteId, Limitable limitable);4. 复制代码1. package com.jspxcms.plug.repository.impl;2. p

26、ublic class ResumeDaoImpl implements ResumeDaoPlus 3.         SuppressWarnings("unchecked")4.         public List<Resume> getList(Integer siteId, Limitable limitable) 5.                 JpqlBuilder jpql =

27、 new JpqlBuilder();6.                 jpql.append("from Resume bean where 1=1");7.                 if (ArrayUtils.isNotEmpty(siteId) 8.                     

28、0;   jpql.append(" and bean.site.id in (:siteId)");9.                         jpql.setParameter("siteId", Arrays.asList(siteId);10.                 11.       &#

29、160;         return jpql.list(em, limitable);12.         13.         private EntityManager em;14.         PersistenceContext15.         public void setEm(EntityManager em) 16.       

30、60;         this.em = em;17.         18. 复制代码其中JpqlBuilder用于拼装jqpl语句、设置参数,并可处理分页问题。mon.orm.JpqlBuilderJspxcms无侵入式插件开发(二次开发)教程之五:Service本帖隐藏的内容需要回复才可以浏览Service配置文件:/WEB-INF/conf/plugin/plug/context-service.xml1. <context:component-scan base-package="com

31、.jspxcms.plug.service.impl">2. <context:exclude-filter type="annotation" 3. expression="org.springframework.stereotype.Controller"/>4. </context:component-scan>复制代码其中com.jspxcms.plug.service.impl为Service的实现类所在包。1. package com.jspxcms.plug.service.impl;2.

32、Service3. Transactional(readOnly = true)4. public class ResumeServiceImpl implements ResumeService 5.         public Page<Resume> findAll(Integer siteId, Map<String, String> params,6.                        

33、Pageable pageable) 7.                 return dao.findAll(spec(siteId, params), pageable);8.         9.         public RowSide<Resume> findSide(Integer siteId,10.               

34、60;         Map<String, String> params, Resume bean, Integer position,11.                         Sort sort) 12.                 if (position = null) 13.      

35、                   return new RowSide<Resume>();14.                 15.                 Limitable limit = RowSide.limitable(position, sort);16.       

36、0;         List<Resume> list = dao.findAll(spec(siteId, params), limit);17.                 return RowSide.create(list, bean);18.         19.         private Specification<Resume> spec(fin

37、al Integer siteId,20.                         Map<String, String> params) 21.                 Collection<SearchFilter> filters = SearchFilter.parse(params).values();22.      

38、;           final Specification<Resume> fsp = SearchFilter.spec(filters,23.                                 Resume.class);24.                 Specifi

39、cation<Resume> sp = new Specification<Resume>() 25.                         public Predicate toPredicate(Root<Resume> root,26.                           

40、0;             CriteriaQuery<?> query, CriteriaBuilder cb) 27.                                 Predicate pred = fsp.toPredicate(root, query, cb);28.          

41、                      if (siteId != null) 29.                                         pred = cb.and(pred, cb.equal(root.get("site")30.

42、                                                        .<Integer> get("id"), siteId);31.                

43、;                 32.                                 return pred;33.                         34.       &

44、#160;         ;35.                 return sp;36.         37.         private ResumeDao dao;38.         Autowired39.         public void setDao(ResumeDao dao) 40

45、.                 this.dao = dao;41.         42.         .43. 复制代码该类使用到JPA的Specification查询方式。可实现后台列表点击表头,按任意列排序;列表页按任意字段查询;编辑页面上一条、下一条功能。Jspxcms无侵入式插件开发(二次开发)教程之六:Controller本帖隐藏的内容需要回复才可以浏览Controller后台配置文件:/WEB-INF/conf/

46、plugin/plug/controller-back.xml1. <context:component-scan base-package="com.jspxcms.plug.web.back" use-default-filters="false">2.         <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller&qu

47、ot;/>3. </context:component-scan>复制代码其中com.jspxcms.plug.web.back为后台Controller包所在位置。1. package com.jspxcms.plug.web.back;2. Controller3. RequestMapping("/plug/resume")4. public class ResumeController 5.         RequiresPermissions("plug:resume:list")6.

48、         RequestMapping("list.do")7.         public String list(8.                         PageableDefaults(sort = "id", sortDir = Direction.DESC) Pageable pageable,9.    

49、;                     HttpServletRequest request, org.springframework.ui.Model modelMap) 10.                 Integer siteId = Context.getCurrentSiteId(request);11.             

50、0;   Map<String, String> params = Servlets.getParameterValuesMap(request,12.                                 Constants.SEARCH_PREFIX);13.                 Page<Resume&

51、gt; pagedList = service.findAll(siteId, params, pageable);14.                 modelMap.addAttribute("pagedList", pagedList);15.                 return "plug/resume/resume_list"16.      

52、   17.         RequiresPermissions("plug:resume:create")18.         RequestMapping("create.do")19.         public String create(Integer id, org.springframework.ui.Model modelMap) 20.         

53、0;       if (id != null) 21.                         Resume bean = service.get(id);22.                         modelMap.addAttribute("bean", bean);23. 

54、0;               24.                 modelMap.addAttribute(OPRT, CREATE);25.                 return "plug/resume/resume_form"26.         27.    

55、    Autowired28.         private ResumeService service;29. 复制代码其中RequestMapping为访问地址,RequiresPermissions为权限代码,需与/WEB-INF/conf/plugin/plug/perties中的菜单权限配置相吻合。Controller前台配置文件:/WEB-INF/conf/plugin/plug/controller-fore.xml1. <context:component-scan base-p

56、ackage="com.jspxcms.plug.web.fore" use-default-filters="false">2.         <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>3. </context:component-scan>复制代码其中com.jspxcms.plug.we

57、b. fore为前台Controller包所在位置。1. package com.jspxcms.plug.web.fore;2. Controller3. public class ResumeController 4.         public static final String TEMPLATE = "plug_resume.html"5.         RequestMapping(value = "/resume.jspx")6.    

58、;     public String resumeForm(Integer page, HttpServletRequest request,7.                         org.springframework.ui.Model modelMap) 8.                 Site site = Context.getCurrentSit

59、e(request);9.                 Map<String, Object> data = modelMap.asMap();10.                 ForeContext.setData(data, request);11.                 ForeContext.setPage(data,

60、 page);12.                 return site.getTemplate(TEMPLATE);13.         14.         RequestMapping(value = "/resume.jspx", method = RequestMethod.POST)15.         public String resumeSubmit

61、(Valid Resume bean, HttpServletRequest request,16.                         HttpServletResponse response, org.springframework.ui.Model modelMap) 17.                 Response resp = new Response(request

62、, response, modelMap);18.                 Site site = Context.getCurrentSite(request);19.                 service.save(bean, site.getId();20.                 return resp.post();21.

63、         22.         Autowired23.         private ResumeService service;24. 复制代码其中模版文件位置为:/files/1/bluewise/plug_resume.htmlJspxcms无侵入式插件开发(二次开发)教程之七:标签本帖隐藏的内容需要回复才可以浏览标签配置文件:/WEB-INF/conf/plugin/plug/controller-back.xml1. <bean id="

64、;PlugResumeList" class="com.jspxcms.plug.web.directive.ResumeListDirective" />复制代码在/WEB-INF/conf/plugin/plug/perties中加上配置:1. freemarkerVariables.ResumeList=PlugResumeList复制代码其中ResumeList为标签名。1. package com.jspxcms.plug.web.directive;2. public class ResumeListDirectiv

65、e implements TemplateDirectiveModel 3.         public static final String SITE_ID = "siteId"4.5.         SuppressWarnings( "rawtypes", "unchecked" )6.         public void execute(E

66、nvironment env, Map params, TemplateModel loopVars,7.                         TemplateDirectiveBody body) throws TemplateException, IOException 8.                 if (loopVars.length < 1) 9.         &#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论