后台管理页面

创建一个公告的 JavaBean
private Integer noticeId;//公告Id
private String title;//标题
private String text;//内容
private Admin author;//发布人
private Date createTime;//创建时间
private Date updateTime;//最后一次修改时间
private Integer isShow;//是否在前端页面展示
映射文件 Notice.hbm.xml
<hibernate-mapping>
<class name="com.zhc.entities.Notice" table="NOTICE">
<id name="noticeId" type="java.lang.Integer">
<column name="NOTICE_ID" />
<generator class="native" />
</id>
<property name="title" type="java.lang.String">
<column name="TITLE" />
</property>
<property name="text" type="java.lang.String">
<column name="TEXT" sql-type="text"/>
</property>
<property name="createTime" type="java.util.Date">
<column name="CREATE_TIME" sql-type="datetime"></column>
</property>
<property name="updateTime" type="java.util.Date">
<column name="UPDATE_TIME" sql-type="datetime"></column>
</property>
<property name="isShow" type="java.lang.Integer">
<column name="IS_SHOW" sql-type="tinyint"></column>
</property>
<many-to-one name="author" class="com.zhc.entities.Admin" column="ADMIN_ID"></many-to-one>
</class>
</hibernate-mapping>
添加和修改公告
Action 方法
//添加公告
public String addNotice() {
noticeService.save(notice);
return SUCCESS;
}
public void prepareAddNotice() {
Date now = new Date();
//如果Id为空则为新增公告
if(noticeId == null) {
notice = new Notice();
notice.setCreateTime(now);
notice.setUpdateTime(now);
notice.setIsShow(0);//默认不在主页展示区
//否则为修改公告,先从数据库获取该公告信息
}else {
notice = noticeService.getById(noticeId);
notice.setUpdateTime(now);
}
}
其中 prepareAddNotice 方法通过判断是否传入了 NoticeId来判断是新增公告还是修改公告,并且准备相应的 Model
Service 方法
public void save(Notice notice) {
noticeDao.save(notice);
}
Dao 方法
public void save(T t) {
this.getHibernateTemplate().save(t);
}
删除公告
Action 方法
//删除公告
public String delete() {
noticeService.delete(noticeService.getById(noticeId));
return SUCCESS;
}
Service 方法
public void delete(Notice notice) {
noticeDao.delete(notice);
}
Dao 方法
public void delete(T t) {
this.getHibernateTemplate().delete(t);
}
查询方法
由于涉及到分页,创建一个用于分页的 PageBean
private Integer currPage;// 当前页数
private Integer pageSize;// 每页显示的记录数
private Integer totalCount;// 总记录数
private Integer totalPage;// 总页数
private List<T> list;// 数据集合
Action中的方法
调用Action中的 list 方法时需要两个参数,currPage 为当前页面,pageSize为每页显示个数
private Integer currPage = 1;//获取当前页数
public void setCurrPage(Integer currPage) {
if(currPage == null) {
currPage = 1;
}
this.currPage = currPage;
}
private Integer pageSize = 3;//每页显示个数
public void setPageSize(Integer pageSize) {
if(pageSize == null) {
pageSize = 3;
}
this.pageSize = pageSize;
}
//公告列表
public String list() {
/*DetachedCriteria对象,条件查询+分页*/
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Notice.class);
PageBean<Notice> pageBean = noticeService.findByPage(detachedCriteria, currPage, pageSize);
request.put("pageBean", pageBean);
return "list";
}
Service 方法
@Override
//分页查询公告
public PageBean<Notice> findByPage(DetachedCriteria detachedCriteria, Integer currPage, Integer pageSize) {
PageBean<Notice> pageBean = new PageBean<Notice>();
pageBean.setPageSize(pageSize);//封装每页显示记录数
//封装总记录数
Integer totalCount = noticeDao.findCount(detachedCriteria);
pageBean.setTotalCount(totalCount);
//封装总页数(向上取整)
Double tc = totalCount.doubleValue();
int num = (int) Math.ceil(tc/pageSize);
//如果当前页大于总页数,则跳到最后一页
if(currPage > num) {
currPage = num;
}
pageBean.setCurrPage(currPage);//封装当前页数
pageBean.setTotalPage(num);
//计算起始位置
Integer begin = (currPage - 1)* pageSize;
List<Notice> list = noticeDao.findByPage(detachedCriteria, begin, pageSize);
pageBean.setList(list);
return pageBean;
}
Dao 方法
//查询总记录数
@Override
public Integer findCount(DetachedCriteria detachedCriteria) {
detachedCriteria.setProjection(Projections.rowCount());
List<Long> list = (List<Long>) this.getHibernateTemplate().findByCriteria(detachedCriteria);
if(list.size() > 0) {
return list.get(0).intValue();
}
return null;
}
//分页查询公告
@Override
public List<Notice> findByPage(DetachedCriteria detachedCriteria, Integer begin, Integer pageSize) {
//由于在findCount中设置了detachedCriteria.setProjection(Projections.rowCount())来查询记录数,需要清空
detachedCriteria.setProjection(null);
return (List<Notice>) this.getHibernateTemplate().findByCriteria(detachedCriteria, begin, pageSize);
}
前端页面通过 <s:iterator> 遍历显示
<s:iterator value="#request.pageBean.list">
<tr>
<td>${title }</td>
<td>${text }</td>
<td>${author.adminName }</td>
<td>
<s:if test="isShow == 1">是</s:if>
<s:else>否</s:else>
</td>
<td><s:date name="createTime"
format="yyyy-MM-dd hh:mm:ss" /></td>
<td><s:date name="updateTime"
format="yyyy-MM-dd hh:mm:ss" /></td>
<td><a
href="${pageContext.request.contextPath }/notice-edit.action?noticeId=<s:property value="noticeId"/>">修改</a>
<a
href="${pageContext.request.contextPath }/notice-delete.action?noticeId=<s:property value="noticeId"/>">删除</a>
</td>
</tr>
</s:iterator>
CSS 控制表格中文字溢出时显示省略号
table {
font-family: verdana, arial, sans-serif;
font-size: 12px;
color: #333333;
border-width: 1px;
border-color: #999999;
border-collapse: collapse;
table-layout: fixed; /* 表格宽度不随文字增多而变长 */
}
table td {
border-width: 1px;
padding: 8px;
border-style: solid;
border-color: #a9c6c9;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
分页菜单的实现
<!-- 分页菜单开始 -->
<table id="pagelink">
<tbody>
<tr>
<td>
<div
style="LINE-HEIGHT: 20px; HEIGHT: 20px; TEXT-ALIGN: right">
共[<B>${pageBean.totalCount }</B>]条记录,[<B>${pageBean.totalPage }</B>]页
,每页显示 <select name="pageSize" onchange="to_page()">
<option value="3"
<s:if test="#request.pageBean.pageSize == 3">selected</s:if>>3</option>
<option value="5"
<s:if test="#request.pageBean.pageSize == 5">selected</s:if>>5</option>
<option value="10"
<s:if test="#request.pageBean.pageSize == 10">selected</s:if>>10</option>
</select> 条
<s:if test="#request.pageBean.currPage != 1">
[<A href="javascript:to_page(1)">首页</A>]
[<A href="javascript:to_page(<s:property value="#request.pageBean.currPage-1"/>)">上一页</A>]
</s:if>
<B>
<s:iterator var="i" begin="1" end="#request.pageBean.totalPage">
<s:if test="#i == #request.pageBean.currPage">
<s:property value="#i" />
</s:if>
<s:else>
<a href="javascript:to_page(<s:property value="#i"/>)"><s:property value="#i" /></a>
</s:else>
</s:iterator>
</B>
<s:if
test="#request.pageBean.currPage != #request.pageBean.totalPage">
[<A
href="javascript:to_page(<s:property value="#request.pageBean.currPage+1"/>)">下一页</A>]
[<A
href="javascript:to_page(<s:property value="#request.pageBean.totalPage"/>)">尾页</A>]
</s:if>
到 <input type="text" size="3" id="page" name="currPage" /> 页
<input type="button" value="Go" onclick="to_page()" />
</div>
</td>
</tr>
</tbody>
</table>
<!-- 分页菜单结束 -->
当更改页面显示数目或者点击其他页的超链接时,调用下面的方法提交表单调用 Action中的 list 方法
function to_page(page) {
if (page) {
$("#page").val(page);/*设置跳转的页面*/
}
$("#noticeForm").submit();
}
主页显示公告模块

通过AJAX异步查询
$.post("${pageContext.request.contextPath }/notice-findInShow.action",{"time": new Date()}, function(data){
// 遍历json的数据:
$(data.showNotice).each(function(i,n){
$("#show_notice").append("<li><span>公告</span><a href='#'>"+n.title+"</li>");
});
},"json");
Action 方法
//保存返回的数据
private Map<String, Object> dataMap = new HashMap<>();
public void setDataMap(Map<String, Object> dataMap) {
this.dataMap = dataMap;
}
public Map<String, Object> getDataMap() {
return dataMap;
}
//查找首页显示的公告
public String findInShow() {
dataMap.put("showNotice", noticeService.findInShow());
return "ajax-success";
}
Service 方法
@Override
public List<Notice> findInShow() {
return noticeDao.findInShow();
}
Dao 方法
//查询首页展示区的公告
@Override
public List<Notice> findInShow() {
return (List<Notice>) this.getHibernateTemplate().find("from Notice where isShow = ?", 1);
}
struts配置文件
<result name="ajax-success" type="json">
<param name="root">dataMap</param>
</result>
完成日期:2018/12/14-2018/12/15
原文出处:https://www.cnblogs.com/zhanghongcan/p/10126684.html
来源:oschina
链接:https://my.oschina.net/u/4342612/blog/3272729