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

相关文章

linux服务之NIS账户管理服务方式

《linux服务之NIS账户管理服务方式》:本文主要介绍linux服务之NIS账户管理服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、所需要的软件二、服务器配置1、安装 NIS 服务2、设定 NIS 的域名 (NIS domain name)3、修改主

SpringBoot后端实现小程序微信登录功能实现

《SpringBoot后端实现小程序微信登录功能实现》微信小程序登录是开发者通过微信提供的身份验证机制,获取用户唯一标识(openid)和会话密钥(session_key)的过程,这篇文章给大家介绍S... 目录SpringBoot实现微信小程序登录简介SpringBoot后端实现微信登录SpringBoo

使用Vue-ECharts实现数据可视化图表功能

《使用Vue-ECharts实现数据可视化图表功能》在前端开发中,经常会遇到需要展示数据可视化的需求,比如柱状图、折线图、饼图等,这类需求不仅要求我们准确地将数据呈现出来,还需要兼顾美观与交互体验,所... 目录前言为什么选择 vue-ECharts?1. 基于 ECharts,功能强大2. 更符合 Vue

Java如何用乘号来重复字符串的功能

《Java如何用乘号来重复字符串的功能》:本文主要介绍Java使用乘号来重复字符串的功能,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java乘号来重复字符串的功能1、利用循环2、使用StringBuilder3、采用 Java 11 引入的String.rep

macOS Sequoia 15.5 发布: 改进邮件和屏幕使用时间功能

《macOSSequoia15.5发布:改进邮件和屏幕使用时间功能》经过常规Beta测试后,新的macOSSequoia15.5现已公开发布,但重要的新功能将被保留到WWDC和... MACOS Sequoia 15.5 正式发布!本次更新为 Mac 用户带来了一系列功能强化、错误修复和安全性提升,进一步增

在React聊天应用中实现图片上传功能

《在React聊天应用中实现图片上传功能》在现代聊天应用中,除了文字和表情,图片分享也是一个重要的功能,本文将详细介绍如何在基于React的聊天应用中实现图片上传和预览功能,感兴趣的小伙伴跟着小编一起... 目录技术栈实现步骤1. 消息组件改造2. 图片预览组件3. 聊天输入组件改造功能特点使用说明注意事项

基于Redis实现附近商铺查询功能

《基于Redis实现附近商铺查询功能》:本文主要介绍基于Redis实现-附近商铺查询功能,这个功能将使用到Redis中的GEO这种数据结构来实现,需要的朋友可以参考下... 目录基于Redis实现-附近查询1.GEO相关命令2.使用GEO来实现以下功能3.使用Java实现简China编程单的附近商铺查询4.Red

使用Python实现实时金价监控并自动提醒功能

《使用Python实现实时金价监控并自动提醒功能》在日常投资中,很多朋友喜欢在一些平台买点黄金,低买高卖赚点小差价,但黄金价格实时波动频繁,总是盯着手机太累了,于是我用Python写了一个实时金价监控... 目录工具能干啥?手把手教你用1、先装好这些"食材"2、代码实现讲解1. 用户输入参数2. 设置无头浏

POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能

《POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能》ApachePOI是一个流行的Java库,用于处理MicrosoftOffice格式文件,提供丰富API来创建、读取和修改O... 目录前言:Apache POIEasyPoiEasyExcel一、EasyExcel1.1、核心特性

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件