SSH项目--国税(五)

8信息发布管理
8.1实现信息发布管理CRUD
8.1.1编写信息实体映射文件
编写信息实体类Info 及其映射文件 Info.hbm.xml
设置“信息分类”、“状态”的常量信息,其中信息分类需要设置一个静态MAP包括信息分类用于在页面的显示。
8.1.2实现信息发布管理
1、编写InfoDao/InfoDaoInfo
2、编写InfoService/InfoServiceImpl
3、编写 InfoAction
4、编写info-struts.xml 和info-spring.xml,并将info-struts.xml引入struts.xml
5、引入美工页面并修改
6、实现页面中添加、编辑、删除
8.2富文本编辑器Ueditor
 ueditor下载地址:
http://ueditor.baidu.com/ 下载1.4.3–utf8-Jsp版本。完整demo可参考下载文件中的index.html
导入 ueditor到项目中;将ueditor导入到项目的js目录下。导入ueditor/jsp/lib目录中的“commons-codec-1.9.jar”、“json.jar”、“ueditor-1.1.1.jar”这几个jar包到项目的web-inf/lib目录中。
可以修改编辑器所需要的组件:

可以修改图片位置:

配置 ueditor 中图片上传前缀和路径;打开“ueditor/jsp/config.json”
 
注意:修改web.xml中struts过滤器的过滤规则,将/*改为 *.action。避免引起struts过滤器把ueditor的图片等资源上传jsp给拦截而导致上传图片等失败。
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
引入ueditor到jsp页面,在ueditor的ueditor.config.js文件中,要求我们需要配置好ueditor的根目录地址;在我们页面引用时也需要在js中制定UEDITOR_HOME_URL的路径。运用到页面时我们只需要将一个textarea的表单项的id和euditor实例化时的id一致即可。
将下面脚本内容引入到jsp页面中:
<script type="text/javascript" charset="utf-8"src="${basePath}js/ueditor/ueditor.config.js"></script>
    <scripttype="text/javascript" charset="utf-8"src="${basePath}js/ueditor/ueditor.all.min.js"> </script>
    <scripttype="text/javascript" charset="utf-8"src="${basePath}js/ueditor/lang/zh-cn/zh-cn.js"></script>
    <script>
    //配置ueditor的根路径
    var UEDITOR_HOME_URL ="${basePath}js/ueditor/";
    var ue =UE.getEditor('editor');
    </script>
<s:textarea id="editor" name="info.content"cssStyle="width:90%;height:160px;" />


8.3异步信息发布
在InfoAction中新增方法 publicInfo,主要用于修改信息的状态。
//异步发布信息
public void publicInfo(){
try {
if(info != null){
//1、更新信息状态
Info tem = infoService.findObjectById(info.getInfoId());
tem.setState(info.getState());
infoService.update(tem);
//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();
}
}


将新加的未发布的信息,在操作栏点击“发布”后,通过ajax将信息状态改为发布状态并更新列表中对应信息的状态。
在listUI.jsp中需要对状态列、和操作栏中的发布链接新增id来标识,当处理成功后根据id修改对应的值。
                           
<td id="show_<s:property value='infoId'/>"align="center"><s:property value="state==1?'发布':'停用'"/></td>
                           <td align="center">
                           <span  id="oper_<s:propertyvalue='infoId'/>">
                          
                           <a href="javascript:doPublic('<s:propertyvalue='infoId'/>',0)">停用</a>
                          
                           <a href="javascript:doPublic('<s:propertyvalue='infoId'/>',1)">发布</a>
                           </s:else>
                           </span>
                               <ahref="javascript:doEdit('<s:propertyvalue='infoId'/>')">编辑</a>
                               <ahref="javascript:doDelete('<s:propertyvalue='infoId'/>')">删除</a>
                           </td>


js:
 
 //异步发布信息,信息的id及将要改成的信息状态
  function doPublic(infoId, state){
  //1、更新信息状态
  $.ajax({
 url:"${basePath}nsfw/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('<ahref="javascript:doPublic(\''+infoId+'\',0)">停用</a>');
  } else {
  $("#show_"+infoId).html("停用");
  $("#oper_"+infoId).html('<ahref="javascript:doPublic(\''+infoId+'\',1)">发布</a>');
  }
  } else {alert("更新信息状态失败!");}
  },
  error: function(){
  alert("更新信息状态失败!");
  }
  });
  }



9hibernate逆向工程
9.1hibernate逆向工程生成实体
介绍一个模型设计工具PowerDesigner,这个是j2ee开发必要的一个工具。一般在开发中先使用PowerDesigner创建实体关系图即概念模型。建立了概念模型后生成特定数据库类型的物理模型,然后根据物理模型的创建表脚本创建库表;最后使用MyEclipse的hibernate特性针对表逆向生成实体类和映射文件。这样免去了编写实体和映射文件及其实体关系的麻烦。
9.2设计概念模型 

relationship 一般的实体关系都可以使用,如果实体之间的关系指定为多对多,那么在生成pdm时则自动会生成一个以2个实体主键联合起来作为联合主键的一张新的关系表inheritance实体之间的继承关系,如:员工——领导association关系,如角色与人员存在多对多关系叫做:人员角色,这个关系里面还可能有是否、状态等。
association link 用于连接实体和关系link/extended dependency实体或关系的额外信息,信息比较独立;不会产生主外键关系
例如;设计一个人员组织架构:有机构、部门、员工、领导、角色、权限。
一个机构有多个部门
一个部门有多个员工
领导可以管理多个部门,同时领导他自己也是员工
一个员工可以有多个角色
一个角色可以分配给多个人
人员角色分配后可以设置是否有效,分配时间等
一个角色有多个权限

在概念模型阶段直接转成物理模型后,转换后的物理模型可以根据项目实际情况再调整相关信息。
9.3导出物理模型 

在物理模型指定或修复主外键关系,一般情况下只需要制定主键的生成策略,外键关系会从概念模型中保留下来。如果对其自动生成外键关系不满意可以在物理模型中修改。在物理模型中的任何修改都会体现在SQL语句中,所以建表时直接复制其语句即可。
9.4物理模型 –生成库表

9.5逆向生成实体及映射文件
1、添加hibernate facet到项目
右击项目——MyEclipse——Project Facets[compabilities]——installHibernate facet)




2、在MyEclipse中打开DB Browser视图:

在 Id Generator 中,如果是mysql中需要自增的可选择native,如果是uuid的可选择uuid.hex或uuid

完成。在图中设置的对应的目录下则会生成实体和映射文件。
10抽取BaseService
由于在每个业务service中都存放了同样的基类方法,如增删改查;应写一个BaseService来实现这些基础方法并用BaseServiceImpl来实现其操作。这样具体业务Service可以直接继承这些内容。在BaseServiceImpl中只需要操作基础方法,所以在与数据库的操作交互中,只要能够获取到BaseDao对象即可。这个BaseDao可以从具体的业务ServiceImpl中传递自身业务Dao给BaseServiceImpl便可。
public interface BaseService<T> {
//新增
public void save(T entity);
//更新
public void update(T entity);
//根据id删除
public void delete(Serializable id);
//根据id查找
public T findObjectById(Serializable id);
//查找列表
public List<T> findObjects();
}
public class BaseServiceImpl<T> implements BaseService<T>{
private BaseDao<T> baseDao;
public void setBaseDao(BaseDao<T> baseDao) {
this.baseDao = baseDao;
}
@Override
public void save(T entity) {
baseDao.save(entity);
}
@Override
public void update(T entity) {
baseDao.update(entity);
}
@Override
public void delete(Serializable id) {
baseDao.delete(id);
}
@Override
public T findObjectById(Serializable id) {
return baseDao.findObjectById(id);
}
@Override
public List<T> findObjects() {
return baseDao.findObjects();
}
}


子Service类;可如下实现对BaseServiceImpl类中的BaseDao对象的实例化:
@Service("userService")
public class UserServiceImpl extends BaseServiceImplimplements UserService {
private UserDao userDao;
@Resource 
public void setUserDao(UserDao userDao) {
super.setBaseDao(userDao);
this.userDao = userDao;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值