Struts2 + Hibernate完成单表新闻管理功能

2024-08-31 13:18

本文主要是介绍Struts2 + Hibernate完成单表新闻管理功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

将新闻的映射文件选择加入到hibernate.cfg.xml中:


后台完成后,在成功页suc.jsp中加入两个超连接。

        <center>

            用户登陆成功,当前登陆用户为: ${user.realName}

            <br />

            <hr />

            <br />

            <a href="pages/news/news_insert.jsp">添加新闻</a>

            <br />

            <a href="news!list.action">新闻列表</a>

            <br />

        </center>


先完成添加功能,编写news_insert.jsp

        <center>

            <form action="news!insert.action" method="post">

                新闻标题:<input type="text" name="news.title" /> <br/>

                新闻内容:<input type="text" name="news.content" /> <br/>

                新闻发布日期:<input type="text" name="news.pubDate" /> <br/>

                <input type="submit" value="添加"/>

            </form>

        </center>


完成Action,实现insert方法。

public class NewsAction extends ActionSupport {

 

    private News news;

 

    // 中间公共页要传递的数据

    // 提示的信息

    private String message;

    // 经过一定时间后,自动进入的页面路径

    private String url;

 

    public String insert() throws Exception {

        ServiceFactory.getINewsServiceInstance().insert(news);

        message = "新闻发布成功";

        url = "pages/suc.jsp";

 

        return "forward";

    }

在struts.xml中配置forward路径

        <action name="news" class="org.liky.action.NewsAction">

            <result name="forward">/forward.jsp</result>

        </action>


编写forward.jsp,完成定时跳转的公共页功能。

        <script type="text/javascript">

            var time = 5;

            function countDown() {

                document.getElementById("time_span").innerHTML = time;

                time--;

                if (time >= 0) {

                    // js中定时调用的方法

                    window.setTimeout("countDown();",1000);

                }

            }

        </script>

    </head>

 

    <body onload="countDown();">

        <center>

            <%

                response.setHeader("refresh","5;URL=" + basePath + request.getAttribute("url"));

            %>

            ${message },<span id="time_span">5</span> 秒后自动跳转!<br/>

            <a href="${url}">如果没有跳转,请点这里!</a>

        </center>

        <br>

    </body>


实现分页列表功能,先在Action中接收参数,并查询当前页的数据以及全部记录数,传递到页面上显示。

    public String list() throws Exception {

        Map<String, Object> map = ServiceFactory.getINewsServiceInstance()

                .list(pageNo, pageSize, keyword, column);

 

        allNews = (List<News>) map.get("allNews");

        count = (Integer) map.get("allCount");

       

        return "list";

    }

    // 分页中要接收的参数

    private int pageNo = 1;

    private int pageSize = 1;

    private String keyword = "";

    private String column = "title";

 

    // 向页面上传递的列表数据

    private List<News> allNews;

    private int count;

配置跳转路径

        <action name="news" class="org.liky.action.NewsAction">

            <result name="forward">/forward.jsp</result>

            <result name="list">/pages/news/news_list.jsp</result>

        </action>

完成news_list.jsp

            <table border="1" width="80%">

                <tr>

                    <td>

                        编号

                    </td>

                    <td>

                        标题

                    </td>

                    <td>

                        内容

                    </td>

                    <td>

                        发布日期

                    </td>

                    <td>

                        操作

                    </td>

                </tr>

                <c:forEach var="news" items="${allNews}">

                    <tr>

                        <td>

                            ${news.id }

                        </td>

                        <td>

                            ${news.title }

                        </td>

                        <td>

                            ${news.content }

                        </td>

                        <td>

                            <fmt:formatDate value="${news.pubDate}" pattern="yyyy-MM-dd"/>

                        </td>

                        <td>

                            修改

                            删除

                        </td>

                    </tr>

                </c:forEach>

            </table>

这里显示出了第一页的数据

 

先实现基本的翻页功能(上一页和下一页)

            <%

                int pageNo = (Integer)request.getAttribute("pageNo");

                int pageSize = (Integer)request.getAttribute("pageSize");

                int count = (Integer)request.getAttribute("count");

                // 总页数

                int allPages = (count - 1) / pageSize + 1;

            %>

            <form action="news!list.action" method="post" id="split_page">

                <input type="hidden" id="pageNo" name="pageNo" value="<%=pageNo %>"/>

                <input type="button" value="首页" onclick="changePage(1);">

                <input type="button" value="上一页" onclick="changePage(<%=pageNo - 1 %>);">

                <input type="button" value="下一页" onclick="changePage(<%=pageNo + 1 %>);">

                <input type="button" value="尾页" onclick="changePage(<%=allPages %>);">

            </form>

           

            <script type="text/javascript">

                function changePage(newPage) {

                    document.getElementById("pageNo").value = newPage;

                    document.getElementById("split_page").submit();

                }

               

            </script>

加入限制,防止用户操作超过范围

            <form action="news!list.action" method="post" id="split_page">

                <input type="hidden" id="pageNo" name="pageNo" value="<%=pageNo %>"/>

                <input type="button" value="首页" <%=pageNo==1?"disabled":"" %> onclick="changePage(1);">

                <input type="button" value="上一页" <%=pageNo==1?"disabled":"" %> onclick="changePage(<%=pageNo - 1 %>);">

                <input type="button" value="下一页" <%=pageNo==allPages?"disabled":"" %> onclick="changePage(<%=pageNo + 1 %>);">

                <input type="button" value="尾页" <%=pageNo==allPages?"disabled":"" %> onclick="changePage(<%=allPages %>);">

            </form>

 

加入跳转到某一页的功能,常见的有以下几种形式:

1)文本框形式:

            <%

                int pageNo = (Integer)request.getAttribute("pageNo");

                int pageSize = (Integer)request.getAttribute("pageSize");

                int count = (Integer)request.getAttribute("count");

                // 总页数

                int allPages = (count - 1) / pageSize + 1;

            %>

            <form action="news!list.action" method="post" id="split_page" onsubmit="return checkPageNo();">             

                <input type="button" value="首页" <%=pageNo==1?"disabled":"" %> onclick="changePage(1);">

                <input type="button" value="上一页" <%=pageNo==1?"disabled":"" %> onclick="changePage(<%=pageNo - 1 %>);">

                <input type="button" value="下一页" <%=pageNo==allPages?"disabled":"" %> onclick="changePage(<%=pageNo + 1 %>);">

                <input type="button" value="尾页" <%=pageNo==allPages?"disabled":"" %> onclick="changePage(<%=allPages %>);">

               

                跳转到

                <input type="text" id="pageNo" name="pageNo" value="<%=pageNo %>" size="3" maxlength="3"/>

                页 / 共 <%=allPages %>

                <input type="submit" value="Go"/>

                 

            </form>

           

            <script type="text/javascript">

                function changePage(newPage) {

                    document.getElementById("pageNo").value = newPage;

                    document.getElementById("split_page").submit();

                }

               

                function checkPageNo() {

                    var pageNo = document.getElementById("pageNo").value;

                   

                    // js,使用  /^规则$/.test(内容)   来判断内容是否符合规则的要求.

                    // \d 表示是否为数字, + 表示前面的内容必须存在一个以上, 两个和到一起表示  数字要有1个以上,不能有其他内容.

                    // \w 表示字母数字或下划线

                    // ? 表示可以出现0次或1,但不能出现多次

                    // . 在正则表达式中表示任意字符  

                    // 比如:验证邮件地址的规则        \w+@\w+\.\w+  

                      

                    if (/^\d+$/.test(pageNo)) {

                        if (pageNo > 0 && pageNo <= <%=allPages%>) {

                            return true;

                        }

                    }

                    return false;

                }

               

            </script>

2) 下拉列表形式

               

                跳转到

                <select id="pageNo" name="pageNo" onchange="changePage(this.value);">

                    <%

                        for (int i = 1;i <= allPages;i++) {

                    %>

                    <option value="<%=i %>" <%=i==pageNo?"selected":"" %>><%=i %></option>

                    <%

                        }

                    %>

                </select>

                页 / 共 <%=allPages %>

               

3)数字形式

            <form action="news!list.action" method="post" id="split_page" onsubmit="return checkPageNo();">             

                <input type="button" value="<<" <%=pageNo==1?"disabled":"" %> οnclick="changePage(1);">

                <input type="button" value="<" <%=pageNo==1?"disabled":"" %> οnclick="changePage(<%=pageNo - 1 %>);">

               

                <%

                    if (pageNo - 2 > 1) {

                %>

                ...

                <%     

                    }

               

                    for (int i = pageNo - 2;i <= pageNo + 2 && i <= allPages;i++) {

                        if (i == pageNo) {

                %>

                    <font color='red'><%=i %></font>

                <%         

                        } else if (i > 0) {

                %>

                    <a href="javascript:changePage(<%=i %>);"><%=i %></a>

                       

                <%     

                        }

                    }

               

                    if (pageNo + 2 < allPages) {

                %>

                ...

                <%     

                    }

               

                %>

               

               

                <input type="button" value=">" <%=pageNo==allPages?"disabled":"" %> onclick="changePage(<%=pageNo + 1 %>);">

                <input type="button" value=">>" <%=pageNo==allPages?"disabled":"" %> onclick="changePage(<%=allPages %>);">

                 

                <input type="hidden" name="pageNo" id="pageNo" value="<%=pageNo %>"/>

            </form>

 

 

再加入改变每页显示记录数的功能

                <%

                    int[] allSize = {1,2,5,10,20};

                %>

                每页显示

                <select id="pageSize" name="pageSize" onchange="changePage(1);">

                    <%

                        for (int i = 0 ;i < allSize.length;i++) {

                    %>

                    <option value="<%=allSize[i] %>" <%=allSize[i]==pageSize?"selected":"" %>><%=allSize[i] %></option>

                    <%     

                        }

                    %>

                </select>

                条数据

               

最后加入搜索功能

                <br/>

                <select name="column" id="column">

                    <option value="title">新闻标题</option>

                    <option value="content" ${column=="content"?"selected":""}>新闻内容</option>

                </select>

                <input type="text" name="keyword" value="${keyword}"/>

                <input type="button" value="搜索" onclick="changePage(1);"/>

               

为了方便使用,这种分页功能一般通过动态包含的形式实现,所以将所有的分页代码,单独写到一个jsp里。

通过动态包含里的<jsp:param>来传递参数。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ taglib uri="/struts-tags" prefix="s"%>

<%

    String path = request.getContextPath();

    String basePath = request.getScheme() + "://"

            + request.getServerName() + ":" + request.getServerPort()

            + path + "/";

%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

    <head>

        <base href="<%=basePath%>">

 

        <title>My JSP 'index.jsp' starting page</title>

    </head>

 

    <body>

   

    <%--

        使用说明:

            将以下代码拷贝到需要显示分页内容的地方

           

            <jsp:include page="/split_page_plugin.jsp">

                <jsp:param value="${pageNo}" name="pageNo"/>

                <jsp:param value="${pageSize}" name="pageSize"/>

                <jsp:param value="${keyword}" name="keyword"/>

                <jsp:param value="${column}" name="column"/>

                <jsp:param value="${count}" name="count"/>

                <jsp:param value="news!list.action" name="URL"/>

                <jsp:param value="title:新闻标题|content:新闻内容" name="columnData"/>

                <jsp:param value="3" name="pageStyle"/>

            </jsp:include>

   

            参数说明:

                URL为查询列表的路径

                columnData是搜索选项的值,格式为: 字段名1:显示文字1|字段名2:显示文字2....

                pageStyle为页面显示风格, 1是数字型, 2是文本框,其他是下拉列表

   

     --%>

   

                    <br/>

            <%

                int pageNo = Integer.parseInt(request.getParameter("pageNo"));

                int pageSize = Integer.parseInt(request.getParameter("pageSize"));

                int count = Integer.parseInt(request.getParameter("count"));

               

                String column = request.getParameter("column");

                String keyword = request.getParameter("keyword");

               

                String URL = request.getParameter("URL");

               

                // 总页数

                int allPages = (count - 1) / pageSize + 1;

            %>

            <form action="<%=URL %>" method="post" id="split_page" onsubmit="return checkPageNo();">             

                <%

                    String pageStyle = request.getParameter("pageStyle");

                    if ("1".equals(pageStyle)) {

                %>

                <input type="button" value="<<" <%=pageNo==1?"disabled":"" %> οnclick="changePage(1);">

                <input type="button" value="<" <%=pageNo==1?"disabled":"" %> οnclick="changePage(<%=pageNo - 1 %>);">

               

                <%

                    if (pageNo - 2 > 1) {

                %>

                ...

                <%     

                    }

               

                    for (int i = pageNo - 2;i <= pageNo + 2 && i <= allPages;i++) {

                        if (i == pageNo) {

                %>

                    <font color='red'><%=i %></font>

                <%         

                        } else if (i > 0) {

                %>

                    <a href="javascript:changePage(<%=i %>);"><%=i %></a>

                       

                <%     

                        }

                    }

               

                    if (pageNo + 2 < allPages) {

                %>

                ...

                <%     

                    }

               

                %>

               

               

                <input type="button" value=">" <%=pageNo==allPages?"disabled":"" %> onclick="changePage(<%=pageNo + 1 %>);">

                <input type="button" value=">>" <%=pageNo==allPages?"disabled":"" %> onclick="changePage(<%=allPages %>);">

                 

                <input type="hidden" name="pageNo" id="pageNo" value="<%=pageNo %>"/>

               

               

                <%     

                    } else if ("2".equals(pageStyle)) {

                %>

                <input type="button" value="首页" <%=pageNo==1?"disabled":"" %> onclick="changePage(1);">

                <input type="button" value="上一页" <%=pageNo==1?"disabled":"" %> onclick="changePage(<%=pageNo - 1 %>);">

                <input type="button" value="下一页" <%=pageNo==allPages?"disabled":"" %> onclick="changePage(<%=pageNo + 1 %>);">

                <input type="button" value="尾页" <%=pageNo==allPages?"disabled":"" %> onclick="changePage(<%=allPages %>);">

               

                跳转到

                <input type="text" id="pageNo" name="pageNo" value="<%=pageNo %>" size="3" maxlength="3"/>

                页 / 共 <%=allPages %>

                <input type="submit" value="Go"/>

                <%     

                    } else {

                %>

                <input type="button" value="首页" <%=pageNo==1?"disabled":"" %> onclick="changePage(1);">

                <input type="button" value="上一页" <%=pageNo==1?"disabled":"" %> onclick="changePage(<%=pageNo - 1 %>);">

                <input type="button" value="下一页" <%=pageNo==allPages?"disabled":"" %> onclick="changePage(<%=pageNo + 1 %>);">

                <input type="button" value="尾页" <%=pageNo==allPages?"disabled":"" %> onclick="changePage(<%=allPages %>);">

                               

                跳转到

                <select id="pageNo" name="pageNo" onchange="changePage(this.value);">

                    <%

                        for (int i = 1;i <= allPages;i++) {

                    %>

                    <option value="<%=i %>" <%=i==pageNo?"selected":"" %>><%=i %></option>

                    <%

                        }

                    %>

                </select>

                页 / 共 <%=allPages %>

               

               

                <%     

                    }

               

                %>

                <%

                    int[] allSize = {1,2,5,10,20};

                %>

                每页显示

                <select id="pageSize" name="pageSize" onchange="changePage(1);">

                    <%

                        for (int i = 0 ;i < allSize.length;i++) {

                    %>

                    <option value="<%=allSize[i] %>" <%=allSize[i]==pageSize?"selected":"" %>><%=allSize[i] %></option>

                    <%     

                        }

                    %>

                </select>

                条数据

                <br/>

                <select name="column" id="column">

                    <%

                        String columnData = request.getParameter("columnData");

                        String[] columnValues = columnData.split("\\|");

                        for (int i = 0;i < columnValues.length;i++) {

                            String[] values = columnValues[i].split(":");

                    %>

                    <option value="<%=values[0] %>" <%=values[0].equals(column)?"selected":"" %>><%=values[1]%></option>

                    <%

                        }

                    %>

                </select>

                <input type="text" name="keyword" value="<%=keyword %>"/>

                <input type="button" value="搜索" onclick="changePage(1);"/>

                 

            </form>

           

            <script type="text/javascript">

                function changePage(newPage) {

                    document.getElementById("pageNo").value = newPage;

                    document.getElementById("split_page").submit();

                }

               

                function checkPageNo() {

                    var pageNo = document.getElementById("pageNo").value;

                   

                    // js,使用  /^规则$/.test(内容)   来判断内容是否符合规则的要求.

                    // \d 表示是否为数字, + 表示前面的内容必须存在一个以上, 两个和到一起表示  数字要有1个以上,不能有其他内容.

                    // \w 表示字母数字或下划线

                    // ? 表示可以出现0次或1,但不能出现多次

                    // . 在正则表达式中表示任意字符  

                    // 比如:验证邮件地址的规则        \w+@\w+\.\w+  

                      

                    if (/^\d+$/.test(pageNo)) {

                        if (pageNo > 0 && pageNo <= <%=allPages%>) {

                            return true;

                        }

                    }

                    return false;

                }

               

            </script>

    </body>

</html>

 

 

点超连接,完成删除操作,因此要加入一个删除的连接路径。

<a href="news!delete.action?news.id=${news.id}" onclick="return window.confirm('确定要删除吗?');">删除</a>                     

编写Action的操作

    public String delete() throws Exception {

        ServiceFactory.getINewsServiceInstance().delete(news.getId());

        message = "新闻删除成功";

        url = "news!list.action";

       

        return "forward";

    }

修改也需要加入超连接。

<a href="news!updatePre.action?news.id=${news.id}">修改</a>                    

完成Action中的查询操作。

    public String updatePre() throws Exception {

        news = ServiceFactory.getINewsServiceInstance().findById(

                news.getId());

 

        return "update";

    }

 

<result name="update">/pages/news/news_update.jsp</result>     

完成修改表单

        <center>

            <form action="news!update.action" method="post">

                新闻标题:<input type="text" name="news.title" value="${news.title }"/> <br/>

                新闻内容:<input type="text" name="news.content" value="${news.content }"/> <br/>

                新闻发布日期:<input type="text" name="news.pubDate" value="${news.pubDate }"/> <br/>

                <input type="hidden" name="news.id" value="${news.id }"/>

                <input type="submit" value="修改"/>

            </form>

        </center>

Action中实现修改操作

    public String update() throws Exception {

        ServiceFactory.getINewsServiceInstance().update(news);

        message = "新闻修改成功";

        url = "news!list.action";

       

        return "forward";

    }































这篇关于Struts2 + Hibernate完成单表新闻管理功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1124012

相关文章

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的

Python实战之屏幕录制功能的实现

《Python实战之屏幕录制功能的实现》屏幕录制,即屏幕捕获,是指将计算机屏幕上的活动记录下来,生成视频文件,本文主要为大家介绍了如何使用Python实现这一功能,希望对大家有所帮助... 目录屏幕录制原理图像捕获音频捕获编码压缩输出保存完整的屏幕录制工具高级功能实时预览增加水印多平台支持屏幕录制原理屏幕

Python实现自动化表单填写功能

《Python实现自动化表单填写功能》在Python中,自动化表单填写可以通过多种库和工具实现,本文将详细介绍常用的自动化表单处理工具,并对它们进行横向比较,可根据需求选择合适的工具,感兴趣的小伙伴跟... 目录1. Selenium简介适用场景示例代码优点缺点2. Playwright简介适用场景示例代码

MySQL中闪回功能的方案讨论及实现

《MySQL中闪回功能的方案讨论及实现》Oracle有一个闪回(flashback)功能,能够用户恢复误操作的数据,这篇文章主要来和大家讨论一下MySQL中支持闪回功能的方案,有需要的可以了解下... 目录1、 闪回的目标2、 无米无炊一3、 无米无炊二4、 演示5、小结oracle有一个闪回(flashb

MySQL使用binlog2sql工具实现在线恢复数据功能

《MySQL使用binlog2sql工具实现在线恢复数据功能》binlog2sql是大众点评开源的一款用于解析MySQLbinlog的工具,根据不同选项,可以得到原始SQL、回滚SQL等,下面我们就来... 目录背景目标步骤准备工作恢复数据结果验证结论背景生产数据库执行 SQL 脚本,一般会经过正规的审批

nvm如何切换与管理node版本

《nvm如何切换与管理node版本》:本文主要介绍nvm如何切换与管理node版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录nvm切换与管理node版本nvm安装nvm常用命令总结nvm切换与管理node版本nvm适用于多项目同时开发,然后项目适配no

Vue 调用摄像头扫描条码功能实现代码

《Vue调用摄像头扫描条码功能实现代码》本文介绍了如何使用Vue.js和jsQR库来实现调用摄像头并扫描条码的功能,通过安装依赖、获取摄像头视频流、解析条码等步骤,实现了从开始扫描到停止扫描的完整流... 目录实现步骤:代码实现1. 安装依赖2. vue 页面代码功能说明注意事项以下是一个基于 Vue.js