SSH实现新闻管理操作

在这里,为表添加一个新的图片字段,可以允许在添加新闻时,上传相关图片,并可以在列表时显示。

ALTER TABLE news ADD (photo   varchar2(100) );

对应的,映射部分也要修改。

        <property name="photo" type="java.lang.String">

        <column name="PHOTO" length="100"></column>

        </property>

完成之前的DAO和Service代码。

开始编写页面代码。

这里不再使用!作为分发的分隔符,因为新版的Struts2.3中已经不推荐使用此符号,而是建议使用自定义的形式来完成分发,这里通过 _ 来分隔。

           <a href="pages/back/news_insertPre.action">添加新闻</a> <br/>

           <a href="pages/back/news_list.action">新闻列表</a> <br/>

编写Action,需要调用Service,查询所有新闻类型。

也要完成新闻类型的DAO代码。

编写Action操作

public class NewsAction extends ActionSupport {

 

    private INewsService service;

 

    private List<NewsType> allType;

 

    public String insertPre() throws Exception {

       allType = service.insertPre();

       return "insert";

    }

配置

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"

    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

 

    <bean id="newsAction" class="org.liky.ssh.back.action.NewsAction"

       scope="prototype">

       <property name="service">

           <ref bean="newsServiceImpl" />

       </property>

    </bean>

 

</beans>

    <package name="back" namespace="/pages/back" extends="my_project_default">

       <action name="news_*" class="newsAction" method="{1}">

           <result name="insert">/pages/back/news/news_insert.jsp</result>

       </action>

    </package>

其中method表示要执行的方法名,里面的{1}表示取得前面的 第一个 * 来代入到这里。

添加表单

       <center>

           <s:form action="news_insert.action" method="post" theme="simple" namespace="/pages/back" enctype="multipart/form-data">

              新闻标题: <s:textfield name="news.title"></s:textfield>

              新闻内容: <s:textfield name="news.content" /> <br/>

              新闻发布日期:<s:textfield name="news.pubDate" /> <br/>

              新闻分类: <s:select list="allType" name="news.newsType.tid" listKey="tid" listValue="tname"></s:select>

              <br/>

              新闻图片: <s:file name="photo"></s:file>

              <s:submit value="添加"/>

           </s:form>

       </center>

完成Action中的处理。

由于有文件上传功能,因此这里建立一个Uitls类,完成文件上传的处理

public class FileUtils {

 

    /**

     * 保存文件功能

     *

     * @param orgFile

     *            要保存的文件

     * @param savePath

     *            保存的路径(物理路径)

     * @param orgFileName

     *            原文件名(用来取得扩展名)

     * @return

     * @throws Exception

     */

    public static String saveFile(File orgFile, String savePath,

           String orgFileName) throws Exception {

       // 生成文件名

       String fileName = UUID.randomUUID().toString();

       // 处理扩展名

       String extName = orgFileName.substring(orgFileName.lastIndexOf("."));

 

       FileOutputStream os = new FileOutputStream(new File(savePath + fileName

              + extName));

 

       FileInputStream is = new FileInputStream(orgFile);

 

       byte[] data = new byte[1024];

 

       int length = 0;

       try {

           while ((length = is.read(data)) != -1) {

              os.write(data, 0, length);

           }

       } catch (Exception e) {

           e.printStackTrace();

       } finally {

           if (is != null) {

              is.close();

           }

           if (os != null) {

              os.close();

           }

       }

 

       LogUtils.addInfo("保存了一个文件: " + fileName + extName);

 

       return fileName + extName;

    }

 

}

完成Action中的添加操作。

    private News news;

 

    private File photo;

    private String photoFileName;

 

    private String message;

    private String url;

 

    public String insert() throws Exception {

       // 文件上传操作

       String savePath = ServletActionContext.getServletContext().getRealPath(

              "/upload")

              + "/";

 

       String fileName = FileUtils.saveFile(photo, savePath, photoFileName);

 

       news.setPhoto(fileName);

 

       service.insert(news);

 

       LogUtils.addInfo("添加了新闻信息: " + news.getId() + " --> XXX 添加的");

 

       message = "新闻发布成功";

       url = "index.jsp" ;

      

       return "forward";

    }

完成列表中显示图片的功能。

 

列表中这里使用Struts2标签完成迭代。

通过s:if ,s:iterator来完成判断和循环功能:

       <center>

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

              <tr>

                  <td>

                     编号

                  </td>

                  <td>

                     标题

                  </td>

                  <td>

                     内容

                  </td>

                  <td>

                     所属分类

                  </td>

                  <td>

                     发布日期

                  </td>

                  <td>

                     照片

                  </td>

                  <td>

                     操作

                  </td>

              </tr>

              <s:if test="allNews != null && allNews.size() > 0">

                  <s:iterator value="allNews">

                     <tr>

                         <td>

                            ${id }

                         </td>

                         <td>

                            ${title }

                         </td>

                         <td>

                            ${content }

                         </td>

                         <td>

                            ${newsType.tname }

                         </td>

                         <td>

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

                         </td>

                         <td>

                            <img src="upload/${photo==null?'nophoto.png':photo}" width="100" height="75"/>

                         </td>

                         <td>

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

                             <a href="news!delete.action?news.id=${id}"

                                onclick="return window.confirm('确定要删除吗?');">删除</a>

                         </td>

                     </tr>

                  </s:iterator>

              </s:if>

           </table>

 

           <br />

 

           <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="pages/back/news_list.action" name="URL" />

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

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

           </jsp:include>

       </center>

 

完成删除操作,需要多传递一个文件名,删除数据的同时删除图片。

    public String delete() throws Exception {

       service.delete(news.getId());

 

       // 顺便删除图片

       String filePath = ServletActionContext.getServletContext().getRealPath(

              "/upload")

              + "/";

       FileUtils.deleteFile(filePath, news.getPhoto());

 

       LogUtils.addInfo("新闻被删除: " + news.getId() + " --> xxx 删除的");

 

       message = "新闻删除成功";

       url = "pages/back/news_list.action";

 

       return "forward";

    }

最后实现修改操作,如果传递了新图片,需要删除原有图片,如果没有传递新图片,则继续保留原有图片内容。

    public String updatePre() throws Exception {

       Map<String, Object> map = service.updatePre(news.getId());

       allType = (List<NewsType>) map.get("allType");

       news = (News) map.get("news");

 

       return "update";

    }

 

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

完成修改页面的处理。

           <s:form action="news_update.action" method="post" theme="simple"

              namespace="/pages/back" enctype="multipart/form-data">

              新闻标题: <s:textfield name="news.title"></s:textfield>

              <br />

              新闻内容: <s:textfield name="news.content" />

              <br />

              新闻发布日期:<s:textfield name="news.pubDate" />

              <br />

              新闻分类: <s:select list="allType" name="news.newsType.tid"

                  listKey="tid" listValue="tname"></s:select>

              <br />

              新闻图片: <s:file name="photo"></s:file>

              <br />

              <s:hidden name="news.id"></s:hidden>

              <s:if test="news.photo != null">

                  <s:hidden name="news.photo"></s:hidden>

              </s:if>

              <s:submit value="修改" />

           </s:form>


提交后,实现修改操作

    public String update() throws Exception {

       // 先处理文件操作

       // 是否上传了新文件

       if (photo != null && photo.length() > 0) {

           // 先删除原有文件

           String filePath = ServletActionContext.getServletContext()

                  .getRealPath("/upload")

                  + "/";

           FileUtils.deleteFile(filePath, news.getPhoto());

 

           String fileName = FileUtils

                  .saveFile(photo, filePath, photoFileName);

 

           news.setPhoto(fileName);

 

       }

 

       service.update(news);

 

       message = "新闻修改成功 ";

       url = "pages/back/news_list.action";

 

       return "forward";

    }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值