千家信息网

SSH如何实现信息发布管理

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇文章主要介绍了SSH如何实现信息发布管理,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。信息发布的开发,还是遵循从entity->d
千家信息网最后更新 2025年01月23日SSH如何实现信息发布管理

这篇文章主要介绍了SSH如何实现信息发布管理,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

信息发布的开发,还是遵循从entity->dao->service->action->config的方式进行。

这里面有几个知识点:

(1)对于表单中的大数据量文本域,在映射文件(*.hbm.xml)中其类型应使用text。

例如:Java文件中

private String content;

在Hibernate映射文件中

(2)对于Date、Calendar、Timstamp的理解

Java文件中

private Timestamp createTime;

在Hibernate映射文件中

(3)抽取BaseService

(4)在新增页面,显示当前时间

Java代码

info = new Info();info.setCreateTime(new Timestamp(new Date().getTime())); // 是为了在页面中显示出当前时间

在JSP页面中显示时间的struts标签

(5)在HTML标签的id值 结合数据库中主键 的使用,使得HTML标签的id值不会重复

1、entity层

Info.java

package com.rk.tax.entity;import java.io.Serializable;import java.sql.Timestamp;import java.util.HashMap;import java.util.Map;public class Info implements Serializable {        private String infoId;        private String type;        private String source;        private String title;        private String content;        private String memo;        private String creator;        private Timestamp createTime;        private String state;                //状态        public static String INFO_STATE_PUBLIC = "1";//发布        public static String INFO_STATE_STOP = "0";//停用                //信息分类         public static String INFO_TYPE_TZGG = "tzgg";        public static String INFO_TYPE_ZCSD = "zcsd";        public static String INFO_TYPE_NSZD = "nszd";        public static Map INFO_TYPE_MAP;        static{                INFO_TYPE_MAP = new HashMap();                INFO_TYPE_MAP.put(INFO_TYPE_TZGG, "通知公告");                INFO_TYPE_MAP.put(INFO_TYPE_ZCSD, "政策速递");                INFO_TYPE_MAP.put(INFO_TYPE_NSZD, "纳税指导");        }                // {{        public String getInfoId() {                return infoId;        }        public void setInfoId(String infoId) {                this.infoId = infoId;        }        public String getType() {                return type;        }        public void setType(String type) {                this.type = type;        }        public String getSource() {                return source;        }        public void setSource(String source) {                this.source = source;        }        public String getTitle() {                return title;        }        public void setTitle(String title) {                this.title = title;        }        public String getContent() {                return content;        }        public void setContent(String content) {                this.content = content;        }        public String getMemo() {                return memo;        }        public void setMemo(String memo) {                this.memo = memo;        }        public String getCreator() {                return creator;        }        public void setCreator(String creator) {                this.creator = creator;        }        public Timestamp getCreateTime() {                return createTime;        }        public void setCreateTime(Timestamp createTime) {                this.createTime = createTime;        }        public String getState() {                return state;        }        public void setState(String state) {                this.state = state;        }        // }}        }

Info.hbm.xml

                                                                                                                                                                                                        

2、dao层

InfoDao.java

package com.rk.tax.dao;import com.rk.core.dao.BaseDao;import com.rk.tax.entity.Info;public interface InfoDao extends BaseDao {}

InfoDaoImpl.java

package com.rk.tax.dao.impl;import com.rk.core.dao.impl.BaseDaoImpl;import com.rk.tax.dao.InfoDao;import com.rk.tax.entity.Info;public class InfoDaoImpl extends BaseDaoImpl implements InfoDao {}

关于BaseDao和BaseDaoImpl可以查看 http://lsieun.blog.51cto.com/9210464/1835776

3、service层

这里要抽取一个通用的Service,即BaseService。

BaseService.java

package com.rk.core.service;import java.io.Serializable;import java.util.List;public interface BaseService {        //新增        public void save(T entity);        //更新        public void update(T entity);        //根据id删除        public void delete(Serializable id);        //根据id查找        public T findById(Serializable id);        //查找列表        public List findAll();}

BaseServiceImpl.java 这里虽然通过baseDao完成了相应的操作,但是还是应该给baseDao提供一个具体的实例变量才能执行操作,否则会报null异常。在这个项目中,所有的dao、service都是由Spring的IOC容器进行管理,那么应该如何让Spring的IOC容器为BaseServiceImpl注入baseDao呢?答案:通过BaseServiceImpl的子类完成注入。

package com.rk.core.service.Impl;import java.io.Serializable;import java.util.List;import com.rk.core.dao.BaseDao;import com.rk.core.service.BaseService;public class BaseServiceImpl implements BaseService {        private BaseDao baseDao;        public void setBaseDao(BaseDao baseDao) {                this.baseDao = baseDao;        }                public void save(T entity) {                baseDao.save(entity);        }        public void update(T entity) {                baseDao.update(entity);        }        public void delete(Serializable id) {                baseDao.delete(id);        }        public T findById(Serializable id) {                return baseDao.findById(id);        }        public List findAll() {                return baseDao.findAll();        }}

InfoService.java

package com.rk.tax.service;import com.rk.core.service.BaseService;import com.rk.tax.entity.Info;public interface InfoService extends BaseService {}

InfoServiceImpl.java 注意:这里通过对infoDao的注入,来同时完成baseDao的注入。

package com.rk.tax.service.impl;import javax.annotation.Resource;import org.springframework.stereotype.Service;import com.rk.core.service.Impl.BaseServiceImpl;import com.rk.tax.dao.InfoDao;import com.rk.tax.entity.Info;import com.rk.tax.service.InfoService;@Service("infoService")public class InfoServiceImpl extends BaseServiceImpl implements InfoService {        private InfoDao infoDao;                @Resource        public void setInfoDao(InfoDao infoDao) {                setBaseDao(infoDao);                this.infoDao = infoDao;        }}

4、action层

InfoAction.java

package com.rk.tax.action;import java.sql.Timestamp;import java.util.Date;import java.util.List;import javax.annotation.Resource;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.ServletActionContext;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Controller;import com.opensymphony.xwork2.ActionContext;import com.rk.core.action.BaseAction;import com.rk.tax.entity.Info;import com.rk.tax.service.InfoService;@Controller("infoAction")@Scope("prototype")public class InfoAction extends BaseAction {                /*****1、业务数据*****/        private List infoList;        private Info info;                /*****2、业务实现类*****/        @Resource        private InfoService infoService;                /*****3、响应JSP页面的操作*****/        //列表页面        public String listUI(){                //加载分类集合                ActionContext.getContext().getContextMap().put("infoTypeMap", Info.INFO_TYPE_MAP);                infoList = infoService.findAll();                return "listUI";        }        //跳转到新增页面        public String addUI(){                //加载分类集合                ActionContext.getContext().getContextMap().put("infoTypeMap", Info.INFO_TYPE_MAP);                info = new Info();                info.setCreateTime(new Timestamp(new Date().getTime())); // 是为了在页面中显示出当前时间                return "addUI";        }                //保存新增        public String add(){                if(info != null){                        infoService.save(info);                }                return "list";        }                //跳转到编辑页面        public String editUI(){                //加载分类集合                ActionContext.getContext().getContextMap().put("infoTypeMap", Info.INFO_TYPE_MAP);                if(info != null && info.getInfoId() != null){                        info = infoService.findById(info.getInfoId());                }                return "editUI";        }                //保存编辑        public String edit(){                if(info != null){                        infoService.update(info);                }                return "list";        }                //删除        public String delete(){                if(info != null && info.getInfoId() != null){                        infoService.delete(info.getInfoId());                }                return "list";        }                //批量删除        public String deleteSelected(){                if(selectedRow != null){                        for(String id : selectedRow){                                infoService.delete(id);                        }                }                return "list";        }                //异步发布信息        public void publicInfo(){                try {                        if(info != null && info.getInfoId()!= null){                                //1、更新信息状态                                Info temp = infoService.findById(info.getInfoId());                                temp.setState(info.getState());                                infoService.update(temp);                                                                //2、输出更新结果                                HttpServletResponse response = ServletActionContext.getResponse();                                response.setContentType("text/html");                                ServletOutputStream outputStream = response.getOutputStream();                                outputStream.write("更新状态成功".getBytes("utf-8"));                                outputStream.close();                        }                } catch (Exception e) {                        e.printStackTrace();                }        }                // {{        public List getInfoList() {                return infoList;        }        public void setInfoList(List infoList) {                this.infoList = infoList;        }        public Info getInfo() {                return info;        }        public void setInfo(Info info) {                this.info = info;        }        // }}}

5、config

(1)entity层配置

就是Hibernate的映射文件

(2)dao层配置,就是将dao注入到Spring的IOC容器中

(3)service层配置,就是将service注入到Spring的IOC容器中

              

(4)action层配置,一是将action注入到Spring的IOC容器中,二是将action在struts中进行url的映射

(5)最后保存所有的配置都汇总到applicationContext和struts.xml中

6、前台JSP页面

6.1、listUI.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>    <%@include file="/common/header.jsp"%>    信息发布管理    
总共1条记录,当前第 1 页,共 1 页    上一页  下一页 到    

知识点(1):struts中显示时间的标签

知识点(2):判断与字符串相等

注意:state的在Java文件中是一个字符串类型

知识点(3):在异步"发布"和"停用"消息的Javascript和HTML标签中的id值

Javascript部分

        //异步发布信息,信息的id及将要改成的信息状态              function doPublic(infoId, state){                      //1、更新信息状态                      $.ajax({                              url:"${basePath}/tax/info_publicInfo.action",                              data:{"info.infoId":infoId,"info.state":state},                              type:"post",                              success:function(msg){                                      //2、更新状态栏、操作拦的显示值                                      if("更新状态成功" == msg){                                              if(state == 1){//说明信息状态已经被改成 发布,状态栏显示 发布,操作栏显示 停用                                                      $('#show_'+infoId).html("发布");                                                      $('#oper_'+infoId).html('停用');                                              }                                              else{                                                      $('#show_'+infoId).html("停用");                                                      $('#oper_'+infoId).html('发布');                                              }                                      }                                      else{                                              alert("更新信息状态失败!");                                      }                              },                              error:function(){                                      alert("更新信息状态失败!");                              }                      });              }

HTML部分

        ">                                        ',0)">停用                                                        ',1)">发布                            编辑    删除

6.2、addUI.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>    <%@include file="/common/header.jsp"%>    信息发布管理    

知识点(1):时间的显示和隐藏字段

注意一点,在使用时,我使用下面语句是错误的,只是因为没有加%{},因为我认为value中接受的值都是OGNL表达式,但是它没有正确显示出来(其实,我认为自己的理解是正确的,至于为什么没有显示出来,我不清楚)。

下面是错误的写法:

知识点(2):显示当前时间和隐藏时间字段

知识点(3):默认为"发布"状态

        

6.3、editUI.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>    <%@include file="/common/header.jsp"%>    信息发布管理    

知识点(1):在编辑页面,要注意隐藏原来的id和数据状态

        

感谢你能够认真阅读完这篇文章,希望小编分享的"SSH如何实现信息发布管理"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

0