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"%>
    信息发布管理
    
      	//全选、全反选
		function doSelectAll(){
			// jquery 1.6 前
			//$("input[name=selectedRow]").attr("checked", $("#selAll").is(":checked"));
			//prop jquery 1.6+建议使用
			$("input[name=selectedRow]").prop("checked", $("#selAll").is(":checked"));		
		}
        //新增
        function doAdd(){
        	document.forms[0].action = "${basePath}/tax/info_addUI.action";
        	document.forms[0].submit();
        }
        //编辑
        function doEdit(id){
            document.forms[0].action = "${basePath}/tax/info_editUI.action?info.infoId="+id;
        	document.forms[0].submit();
        }
        //删除
        function doDelete(id){
        	document.forms[0].action = "${basePath}/tax/info_delete.action?info.infoId="+id;
        	document.forms[0].submit();
        }
        //批量删除
        function doDeleteAll(){
        	document.forms[0].action = "${basePath}/tax/info_deleteSelected.action";
        	document.forms[0].submit();
        }
        //异步发布信息,信息的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("更新信息状态失败!");
  				}
  			});
  		}
    



    
        
            
                
信息发布管理
 
                                     
  •                         信息标题:                     
  •                     
  •                                                                                                               
                                                                                                                            信息标题                             信息分类                             创建人                             创建时间                             状态                             操作                                                                                bgcolor="f8f8f8"  >                                 "/>                                                                                                                                                                                                                                       " align="center">                                                                   ">                                                                   ',0)">停用                                                                                                    ',1)">发布                                                                                                       ')">编辑                                     ')">删除                                                                                                                             
                
                               总共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部分

    " align="center">
    
    	">
    		
    			',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如何实现信息发布管理”这篇文章对大家有帮助,同时也希望大家多多支持创新互联,关注创新互联行业资讯频道,更多相关知识等着你来学习!


    网站栏目:SSH如何实现信息发布管理
    分享地址:http://scyanting.com/article/jpphhi.html