SSH实现新闻管理操作

来源:互联网 发布:mac修改用户名无法登录 编辑:程序博客网 时间:2024/06/14 10:56

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

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

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

        <propertyname="photo"type="java.lang.String">

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

        </property>

完成之前的DAO和Service代码。

开始编写页面代码。

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

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

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

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

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

编写Action操作

public class NewsAction extends ActionSupport {

 

    private INewsServiceservice;

 

    private List<NewsType>allType;

 

    public String insertPre()throws Exception {

       allType = service.insertPre();

       return"insert";

    }

配置

<?xmlversion="1.0"encoding="UTF-8"?>

<beansxmlns="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">

 

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

       scope="prototype">

       <propertyname="service">

           <refbean="newsServiceImpl"/>

       </property>

    </bean>

 

</beans>

    <packagename="back"namespace="/pages/back"extends="my_project_default">

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

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

       </action>

    </package>

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

添加表单

       <center>

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

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

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

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

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

              <br/>

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

              <s:submitvalue="添加"/>

           </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 Newsnews;

 

    private Filephoto;

    private StringphotoFileName;

 

    private Stringmessage;

    private Stringurl;

 

    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>

           <tableborder="1"width="80%">

              <tr>

                  <td>

                     编号

                  </td>

                  <td>

                     标题

                  </td>

                  <td>

                     内容

                  </td>

                  <td>

                     所属分类

                  </td>

                  <td>

                     发布日期

                  </td>

                  <td>

                     照片

                  </td>

                  <td>

                     操作

                  </td>

              </tr>

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

                  <s:iteratorvalue="allNews">

                     <tr>

                         <td>

                            ${id }

                         </td>

                         <td>

                            ${title }

                         </td>

                         <td>

                            ${content }

                         </td>

                         <td>

                            ${newsType.tname }

                         </td>

                         <td>

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

                         </td>

                         <td>

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

                         </td>

                         <td>

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

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

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

                         </td>

                     </tr>

                  </s:iterator>

              </s:if>

           </table>

 

           <br/>

 

           <jsp:includepage="/split_page_plugin.jsp">

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

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

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

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

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

              <jsp:paramvalue="pages/back/news_list.action"name="URL"/>

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

              <jsp:paramvalue="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";

    }

 

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

完成修改页面的处理。

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

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

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

              <br/>

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

              <br/>

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

              <br/>

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

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

              <br/>

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

              <br/>

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

              <s:iftest="news.photo != null">

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

              </s:if>

              <s:submitvalue="修改"/>

           </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 0