开源项目PublicCMS初体验
来源:互联网 发布:pp盘古越狱mac 编辑:程序博客网 时间:2024/05/16 01:13
项目背景
说说项目背景吧,之所以会用到这个开源项目呢,是因为我们公司要做一个自己的门户网站。要求速度和质量。所以了在众多因素下我们选择了这个开源的项目。
下载项目及项目相关资料
https://git.oschina.net/sanluan/PublicCMS-lib
http://www.publiccms.com/
项目结构
可以说这个项目的项目目录结构还是比较清晰的大概就是我们说的mvc模式了
快速上手及二次开发
1.首先将项目启动起来,进入这个页面。
2. 后台的一些东西。和创建模板的东西自己百度看看哇这里就不介绍了。基本就是拿到前端给的html页面后在后台配置一个基本就出来了。重点是需要进行二次开发的东西这里就重点讲一下了。并且配上代码。
3.我们讲一下如何提交表单数据到后台。和后台页面产生表格查看吧
这里我们需要提交询价信息。
4.代码实现
1.控制器
package com.publiccms.controller.admin.message;import static com.sanluan.common.tools.JsonUtils.getString;import static com.sanluan.common.tools.RequestUtils.getIpAddress;import java.util.Date;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.ModelMap;import org.springframework.web.bind.annotation.RequestMapping;import com.publiccms.common.base.AbstractController;import com.publiccms.entities.log.LogOperate;import com.publiccms.entities.message.EnquiryMessage;import com.publiccms.entities.sys.SysSite;import com.publiccms.logic.service.log.LogLoginService;import com.publiccms.logic.service.message.EnquiryMessageService;import com.publiccms.logic.service.sys.SysDomainService;/** * * @ClassName: EnquiryAdminMessageController * @Description:(项目询价) * @author Sirius_KP * @date 2017-3-8 下午5:41:33 */@Controller@RequestMapping("enquiryMessage")public class EnquiryAdminMessageController extends AbstractController { @Autowired private EnquiryMessageService service; private String[] ignoreProperties = new String[] { "id" }; @RequestMapping("save") public String save(EnquiryMessage entity, HttpServletRequest request, HttpSession session) { try { if (notEmpty(entity.getId())) { entity = service.update(entity.getId(), entity, ignoreProperties); } else { entity.setCreate_time(new Date()); service.save(entity); } } catch (Exception e) { e.printStackTrace(); return TEMPLATE_ERROR; } return TEMPLATE_DONE; } @SuppressWarnings("unchecked") @RequestMapping("delete") public String delete(Integer id, HttpServletRequest request, HttpSession session, ModelMap model) { SysSite site = getSite(request); if (verifyCustom("noright", !siteComponent.isMaster(site.getId()), model)) { return TEMPLATE_ERROR; } EnquiryMessage entity = service.getEntity(id); if (null != entity) { service.delete(id); //记录日志 Long userId = getAdminFromSession(session).getId(); Date now = getDate(); String ip = getIpAddress(request); logOperateService.save(new LogOperate(site.getId(), userId, LogLoginService.CHANNEL_WEB_MANAGER, "delete.site", ip, now, getString(entity))); } return TEMPLATE_DONE; }}
package com.publiccms.controller.web.message;import java.util.Date;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import com.publiccms.common.base.AbstractController;import com.publiccms.entities.message.EnquiryMessage;import com.publiccms.logic.service.message.EnquiryMessageService;/** * * @ClassName: EnquiryMessageController * @Description:(项目询价) * @author Sirius_KP * @date 2017-3-8 下午5:43:04 */@Controller@RequestMapping("enquiryMessage")public class EnquiryMessageController extends AbstractController { @Autowired private EnquiryMessageService service; private String[] ignoreProperties = new String[] { "id" }; @RequestMapping("save") @ResponseBody public String save(EnquiryMessage entity, HttpServletRequest request, HttpSession session) { try { if (notEmpty(entity.getId())) { entity = service.update(entity.getId(), entity, ignoreProperties); } else { entity.setCreate_time(new Date()); service.save(entity); } } catch (Exception e) { return ERROR; } return SUCCESS; }}
2.实体
package com.publiccms.entities.message;// Generated 2016-1-19 11:28:06 by Hibernate Tools 4.3.1import static javax.persistence.GenerationType.IDENTITY;import java.util.Date;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.Table;import javax.persistence.Temporal;import javax.persistence.TemporalType;import com.fasterxml.jackson.annotation.JsonIgnore;import com.sanluan.common.generator.annotation.GeneratorColumn;/** * 项目询价 * @ClassName: EnquiryMessage * @Description:(EnquiryMessage的实体类) * @author Sirius_KP * @date 2017-3-3 上午10:25:43 */@Entity@Table(name = "enquiryMessage")public class EnquiryMessage implements java.io.Serializable { private static final long serialVersionUID = 1L; @GeneratorColumn(title = "ID") private Integer id; @GeneratorColumn(title = "用户名", condition = true, like = true) private String name; @GeneratorColumn(title = "联系电话", condition = true, like = true) private String phone; @GeneratorColumn(title = "电子邮件", condition = true, like = true) private String email; @GeneratorColumn(title = "需求描述", condition = true, like = true) private String descriptions; /**(状态)*/ @GeneratorColumn(title = "状态", condition = true, like = true) private Integer status=0; @GeneratorColumn(title = "询价时间", condition = true) private Date create_time; @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "id", unique = true, nullable = false) public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } @Column(name = "name", length = 50) public String getName() { return this.name; } public void setName(String name) { this.name = name; } @Column(name = "phone", length = 50) public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } @Column(name = "email", length = 50) public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Column(name = "descriptions", length = 500) public String getDescriptions() { return descriptions; } public void setDescriptions(String descriptions) { this.descriptions = descriptions; } @Temporal(TemporalType.TIMESTAMP) @Column(name = "create_time", length = 19) public Date getCreate_time() { return create_time; } public void setCreate_time(Date create_time) { this.create_time = create_time; } public Integer getStatus() { return status; } public void setStatus(Integer status) { this.status = status; }}
3.dao层代码
package com.publiccms.logic.dao.message;import org.springframework.stereotype.Repository;import com.publiccms.entities.message.EnquiryMessage;import com.sanluan.common.base.BaseDao;import com.sanluan.common.handler.PageHandler;import com.sanluan.common.handler.QueryHandler;@Repositorypublic class EnquiryMessageDao extends BaseDao<EnquiryMessage> { @Override protected EnquiryMessage init(EnquiryMessage entity) { if (empty(entity.getCreate_time())) { entity.setCreate_time(getDate()); } return entity; } public PageHandler getPage(String name, Integer status, Integer pageIndex, Integer pageSize) { QueryHandler queryHandler = getQueryHandler("from EnquiryMessage bean"); if (notEmpty(name)) { queryHandler.condition("(bean.name like :name)").setParameter("name", like(name)); } if (notEmpty(status)) { queryHandler.condition("(bean.status = :status)").setParameter("status", status); } queryHandler.order("bean.id desc"); return getPage(queryHandler, pageIndex, pageSize); }}
4.service层代码
package com.publiccms.logic.service.message;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Repository;import org.springframework.transaction.annotation.Transactional;import com.publiccms.entities.message.EnquiryMessage;import com.publiccms.logic.dao.message.EnquiryMessageDao;import com.sanluan.common.base.BaseService;import com.sanluan.common.handler.PageHandler;/** * * @ClassName: EnquiryMessageService * @Description:(询价服务) * @author Sirius_KP * @date 2017-3-8 下午5:45:47 */@Repositorypublic class EnquiryMessageService extends BaseService<EnquiryMessage> { @Transactional(readOnly = true) public PageHandler getPage( String name, Integer status, Integer pageIndex, Integer pageSize) { return dao.getPage( name,status, pageIndex, pageSize); } @Autowired private EnquiryMessageDao dao;}
5.视图层代码
package com.publiccms.views.directive.message;import java.io.IOException;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import com.publiccms.common.base.AbstractTemplateDirective;import com.publiccms.logic.service.message.EnquiryMessageService;import com.sanluan.common.handler.PageHandler;import com.sanluan.common.handler.RenderHandler;/** * * @ClassName: EnquiryMessageListDirective * @Description:(询价) * @author Sirius_KP * @date 2017-3-8 下午5:46:59 */@Componentpublic class EnquiryMessageListDirective extends AbstractTemplateDirective { @Override public void execute(RenderHandler handler) throws IOException, Exception { PageHandler page = service.getPage(handler.getString("name"),handler.getInteger("status"), handler.getInteger("pageIndex", 1), handler.getInteger("count", 30)); handler.put("page", page).render(); } @Override public boolean needAppToken() { return true; } @Autowired private EnquiryMessageService service;}
package com.publiccms.views.directive.message;import java.io.IOException;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import com.publiccms.common.base.AbstractTemplateDirective;import com.publiccms.entities.message.EnquiryMessage;import com.publiccms.logic.service.message.EnquiryMessageService;import com.sanluan.common.handler.RenderHandler;@Componentpublic class EnquiryMessageSeeDirective extends AbstractTemplateDirective { @Override public void execute(RenderHandler handler) throws IOException, Exception { Integer id = handler.getInteger("id"); if (notEmpty(id)) { EnquiryMessage entity = service.getEntity(id); if (null != entity) { handler.put("object", entity).render(); } } else { Integer[] ids = handler.getIntegerArray("ids"); if (notEmpty(ids)) { List<EnquiryMessage> entityList = service.getEntitys(ids); Map<String, EnquiryMessage> map = new LinkedHashMap<String, EnquiryMessage>(); for (EnquiryMessage entity : entityList) { map.put(String.valueOf(entity.getId()), entity); } handler.put("map", map).render(); } } } @Override public boolean needAppToken() { return true; } @Autowired private EnquiryMessageService service;}
6.模板
list__Enquiry.html
<@_enquiryMessageList name=name status=status pageIndex=pageNum count=numPerPage ><div class="pageHeader"> <form id="pagerForm" onsubmit="return navTabSearch(this);" method="post"> <#include "../include_page/paramters.html"/> <#include "../include_page/messageQuery.html"/> </form></div><div class="pageContent"> <div class="panelBar"> <ul class="toolBar"> <li><a href="enquiryMessage/delete?id={sid}" title="确定要删除该条记录吗?" target="ajaxTodo"><i class="icon-trash icon-large"></i> 删除</a></li> </ul> </div> <table style="table-layout: fixed" class="list" width="100%" layoutH="92"> <thead> <tr> <th width="30">ID</th> <th>用户名</th> <th>联系电话</th> <th>电子邮件</th> <th>需求描述</th> <th>是否已读</th> <th>询价时间</th> <th>操作</th> </tr> </thead> <tbody> <#list page.list as a> <tr target="sid" rel="${a.id}"> <td>${a.id}</td> <td>${a.name!}</td> <td>${a.phone!}</td> <td>${a.email!}</td> <td style="white-space: nowrap;text-overflow: ellipsis;overflow: hidden;">${a.descriptions!}</td> <#if a.status==1> <td><span style="color: green;">已读</span></td> <#elseif a.status==0> <td><span style="color: red;">未读</span></td> <#else> </#if> <td>${a.create_time!}</td> <td align="center"> <a href="/admin/message/add_Enquiry.html?id=${a.id}" target="navTab" rel="/admin/message/add_Enquiry">查看</a> </td> </tr> </#list> </tbody> </table> <#include "../include_page/page.html"/></div></@_enquiryMessageList>
add_Enquiry.html
<@_enquiryMessageSee id=id><#assign a=object/><#assign b=object.status!/></@_enquiryMessageSee><form method="post" action="/admin/enquiryMessage/save" class="pageForm required-validate" onsubmit="return validateCallback(this, navTabAjaxDone);"> <input name="id" type="hidden" value="${(a.id)!}" /> <div class="formBar"> <ul> <li><button type="submit" class="buttonActive">保存</button></li> <li><button type="button" class="button close">关闭</button></li> </ul> </div> <div class="pageFormContent" layoutH="56"> <dl class="nowrap"> <dt>用户名:</dt> <dd> <input readonly="readonly" class="required" name="" type="text" maxlength="255" size="30" value="${(a.name)!}"/> </dd> </dl> <dl class="nowrap"> <dt>联系电话:</dt> <dd> <input readonly="readonly" class="required" name="" type="text" maxlength="255" size="30" value="${(a.phone)!}"/> </dd> </dl> <dl class="nowrap"> <dt>电子邮件:</dt> <dd> <input readonly="readonly" class="required" name="" type="text" maxlength="255" size="30" value="${(a.email)!}"/> </dd> </dl> <dl class="nowrap"> <dt>状态:</dt> <dd> <select name="status"> <#if b==1> <option selected value="1">已读</option> <option value="0">未读</option> <#elseif b==0> <option value="1">已读</option> <option selected value="0">未读</option> <#else> </#if> </select> </dd> </dl> <dl class="nowrap"> <dt>需求描述:</dt> <dd> <textarea readonly="readonly" rows="10" cols="">${(a.descriptions)!}</textarea> </dd> </dl> <dl class="nowrap"> <dt>询价时间:</dt> <dd> <input readonly="readonly" class="required" name="" type="text" maxlength="255" size="30" value="${(a.create_time)!}"/> </dd> </dl> </div></form>
messageQuery.html
<div class="searchBar"> <ul class="searchContent"> <li> <label>名称:</label> <input type="text" size="20" name="name" value="${name!}" /> </li> <li> <label>查看状态:</label> <select class="combox" name="status"> <option value=""${(!status?has_content)?then(' selected="true"','')?no_esc}>不限</option> <option value="1"${(status?has_content&&"1"==status)?then(' selected="true"','')?no_esc}>已读</option> <option value="0"${(status?has_content&&"0"==status)?then(' selected="true"','')?no_esc}>未读</option> </select> </li> </ul> <div class="subBar"> <ul> <li> <button type="submit" class="buttonActive">搜索</button> </li> </ul> </div> </div>
好了代码就是上面的就可以实现二次开发的需求了
这时在浏览器上输入http://localhost:8080/admin/message/list__Enquiry看看
出现这个就是代码是正确的
接下来只需要将这个路径配置进后台,在后台添加一个菜单就可以完成这个功能了
0 0
- 开源项目PublicCMS初体验
- 项目管理初体验
- 项目管理初体验
- 项目管理初体验
- 菜鸟项目纠结初体验
- markdown初体验--项目3
- Maven项目管理工具初体验
- gitlab新建项目初体验
- Maven项目管理工具初体验
- Maven项目管理工具初体验
- publicCMS调用接口
- publiccms部署步骤
- 安装publiccms,cms过程
- google和微软的开源项目托管服务的初体验
- IBM区块链BlockChain开源项目Hyperledger/Fabric初体验
- 项目体验
- 项目管理之我初体验
- Symfony 2.1 项目开发初体验
- react用webpack打包
- 爬楼梯
- Handler例子
- RabbitMQ 消息轮询和消息确认机制
- zookeeper梳理二 之 zookeeper的数据模型,运维
- 开源项目PublicCMS初体验
- JS前端动态添加表格--包括合并指定单元格
- 如何使用一个for循环输出九九乘法表
- AndroidStudio中NDK开发-制作so库与调用so库(一)
- Maven学习总结(二)——Maven项目构建过程练习
- hi3519v101 nandflash 调试
- 关于JEE中的javax.mail 和javamail冲突问题
- Java多线程-工具篇-BlockingQueue
- Android 带角标的ImageView(微博,QQ消息提示)