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";

    }































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值