Spring + Struts + Hibernate联合开发(多对一关系)

来源:互联网 发布:我们应该禁止网络用语 编辑:程序博客网 时间:2024/06/11 19:32

一、项目搭建的整体效果:


1、建立好项目后,需要再建立两个单独的源文件夹,分别为test和config

在config下分别建立struts,spring和hibernate三个文件夹,以便分别放这三部分的配置
2、加入Spring支持
Spring的默认配置文件先使用-hibernate.xml,方便配置,将这个生成的配置文件复制多份:
1) -hibernate.xml:放入固定的数据库连接等相关配置
2) -dao.xml:放入DAO相关配置
3) -service.xml:放入Service相关配置
4) -struts.xml:放入Action相关配置
5) -transaction.xml:放入固定的事务处理相关配置。
3、加入Hibernate支持
在-hibernate.xml中补充其他配置 (配置包括dataSource配置、Hibernate的属性配置和hibernateTemplate配置)
在-transaction.xml中补充三个<bean>的配置(配置包括transactionManager配置、transactionInterceptor配置和BeanNameAutoProxyCreator配置)。
4、加入和struts的支持 
加入支持后,将Structs.xml放到config根目录下。Struts的配置文件拆分:
1)Struts.xml:放入一些公共的配置和包含信息
2)Struts-root.xml:里面配置所有不需要登陆就能访问的Action配置。
3)Struts-front.xml:前台普通用户登陆后才能处理的相关功能
4)Struts-back.xml:后台管理员登陆后才能处理的相关功能。
5、然后需要建立一些公共的文件夹或包,以及拷贝公共的类到项目中。
6、生成表的pojo映射
7、在web.xml 中加入监听配置。

8、最后启动服务器,检测环境是否正确

项目运行的效果:


建立数据库的两张表:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. CREATE TABLE news_type (  
  2.        tid                      number(8)           primary key ,  
  3.        tname                    varchar2(50)        not null                      
  4. );  
  5. INSERT INTO news_type VALUES (1,'经济');  
  6. INSERT INTO news_type VALUES (2,'军事');  
  7. INSERT INTO news_type VALUES (3,'娱乐');  
  8. INSERT INTO news_type VALUES (4,'游戏');  
  9. INSERT INTO news_type VALUES (5,'广告');  
  10.   
  11. CREATE TABLE news (  
  12.        id                       number(8)           primary key ,  
  13.        title                    varchar2(50)        not null,  
  14.        content                  varchar2(500)       not null,  
  15.        pub_date                 date                not null,  
  16.        Photo                     varchar2(100),  
  17.        type_id                  number(8)           not null,  
  18.        foreign key (type_id) references news_type (tid) on delete cascade   
  19. );  
  20. commit;  

二、按顺序加入Spring,Hibernate,Struts支持包

建立项目SSHDemo,加入ssh框架支持包的顺序:先Spring,再Hibernate,最后再Struts。
加入Spring支持包:

下一步:

加入Hibernate的支持包:

下一步:选择已经存在的

注意:这里不需要家里SessionFactory,因为这里要是建立,就是需要Hibernate自己管理连接。
[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">  
  5.   
  6.     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">  
  7.         <property name="driverClassName" value="oracle.jdbc.OracleDriver">  
  8.         </property>  
  9.         <property name="url" value="jdbc:oracle:thin:@localhost:1521:ORCL">  
  10.         </property>  
  11.         <property name="username" value="sunxun"></property>  
  12.         <property name="password" value="123"></property>  
  13.     </bean>  
  14.     <bean id="sessionFactory"  
  15.     class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  16.         <property name="dataSource">  
  17.             <ref bean="dataSource" />  
  18.         </property>  
  19.         <property name="hibernateProperties">  
  20.             <props>  
  21.                 <prop key="hibernate.dialect">  
  22.                     org.hibernate.dialect.Oracle9Dialect  
  23.                 </prop>  
  24.                 <prop key="hibernate.show_sql">  
  25.                     true  
  26.                 </prop>  
  27.                 <prop key="hibernate.format_sql">  
  28.                     true  
  29.                 </prop>  
  30.             </props>  
  31.         </property>  
  32.     </bean>  
  33. </beans>  
最后加入Struts支持包:Struts选择2.1版

三、Dao层

这里DAO层,有两个:INewsDAO 和 INewsTypeDAO:
IDAO:
[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public interface IDAO<K, V> {  
  2.   
  3.     public void doCreate(V vo) throws Exception;  
  4.   
  5.     public void doUpdate(V vo) throws Exception;  
  6.   
  7.     public void doRemove(K id) throws Exception;  
  8.   
  9.     public List<V> findAll() throws Exception;  
  10.   
  11.     public V findById(K id) throws Exception;  
  12.   
  13.     public List<V> findAll(int pageNo, int pageSize, String keyword,  
  14.             String column) throws Exception;  
  15.   
  16.     public int getAllCount(String keyword, String column) throws Exception;  
  17.   
  18. }  
INewsDAOINewsDAO继承IDAO这个通用抽象类;
[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public interface INewsDAO extends IDAO<Integer, News> {  
  2. }  
INewsTypeDAO:这是为添加,修改 新闻类型下拉框做准备的。
[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public interface INewsTypeDAO extends IDAO<Integer, NewsType> {  
  2. }  
INewsDAOImpl:
[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. package org.liky.ssh.dao.impl;  
  2. import java.util.List;  
  3. import org.hibernate.criterion.DetachedCriteria;  
  4. import org.hibernate.criterion.Restrictions;  
  5. import org.liky.ssh.dao.INewsDAO;  
  6. import org.liky.ssh.pojo.News;  
  7. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;  
  8.   
  9. public class NewsDAOImpl extends HibernateDaoSupport implements INewsDAO {  
  10.   
  11.     public void doCreate(News vo) throws Exception {  
  12.         super.getHibernateTemplate().save(vo);  
  13.     }  
  14.   
  15.     public void doRemove(Integer id) throws Exception {  
  16.         super.getHibernateTemplate().delete(findById(id));  
  17.     }  
  18.   
  19.     public void doUpdate(News vo) throws Exception {  
  20.         super.getHibernateTemplate().update(vo);  
  21.     }  
  22.   
  23.     public List<News> findAll() throws Exception {  
  24.         return getHibernateTemplate().loadAll(News.class);  
  25.     }  
  26.   
  27.     public List<News> findAll(final int pageNo, final int pageSize,  
  28.             final String keyword, final String column) throws Exception {  
  29.         // Spring没有提供针对HQL方式的分页查询方法  
  30.         // 1、使用Criteria来完成分页查询  
  31.         DetachedCriteria c = DetachedCriteria.forClass(News.class);  
  32.         // 加入条件  
  33.         c.add(Restrictions.like(column, "%" + keyword + "%"));  
  34.   
  35.         List all = super.getHibernateTemplate().findByCriteria(c,  
  36.                 (pageNo - 1) * pageSize, pageSize);  
  37.   
  38.         // 2、自行扩展Spring功能,添加分页查询方法,使用的方式为匿名内部类  
  39.         // List all = super.getHibernateTemplate().executeFind(  
  40.         // new HibernateCallback() {  
  41.         // public Object doInHibernate(Session session)  
  42.         // throws HibernateException, SQLException {  
  43.         // String hql = "FROM News AS n WHERE n." + column  
  44.         // + " LIKE ?";  
  45.         // Query query = session.createQuery(hql);  
  46.         // query.setString(0, "%" + keyword + "%");  
  47.         // query.setFirstResult((pageNo - 1) * pageSize);  
  48.         // query.setMaxResults(pageSize);  
  49.         //  
  50.         // return query.list();  
  51.         // }  
  52.         // });  
  53.   
  54.         return all;  
  55.     }  
  56.   
  57.     public News findById(Integer id) throws Exception {  
  58.         return super.getHibernateTemplate().get(News.class, id);  
  59.     }  
  60.   
  61.     public int getAllCount(String keyword, String column) throws Exception {  
  62.         String hql = "SELECT COUNT(n) FROM News AS n WHERE n." + column  
  63.                 + " LIKE ?";  
  64.         List all = super.getHibernateTemplate().find(hql, "%" + keyword + "%");  
  65.         return ((Long) all.get(0)).intValue();  
  66.     }  
  67. }  
注:

在这里调用的HibernateTemplate的常用操作有以下几类:

1)  继承自Session操作:save(),update(),delete(),get/load(),saveOrUpdate()

2)  扩展Session的操作:loadAll()(查询全部数据),deleteAll(Collection)(删除一组数据),saveOrUpdateAll(Collection)

3)  HQL操作:find(hql,参数),返回的是List集合

4)  Criteria操作:findByCriteria,可以实现分页功能

5)  扩展操作:executeFind,execute,自行通过匿名内部类扩展Spring操作。

这里我们还要养成习惯:就是写完一部代码,就立刻写它的配置文件:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">  
  2.     <property name="sessionFactory">  
  3.         <ref bean="sessionFactory" />  
  4.     </property>  
  5. </bean>  
  6.   
  7. <bean id="newsDAOImpl" class="org.liky.dao.impl.NewsDAOImpl">  
  8.     <property name="hibernateTemplate">  
  9.         <ref bean="hibernateTemplate" />  
  10.     </property>  
  11. </bean>  
INewsTypeDAOImpl:这里只需要加入一个查询全部的方法就可以了。
[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public List<NewsType> findAll() throws Exception {  
  2.         return super.getHibernateTemplate().loadAll(NewsType.class);  
  3.     }<strong>  
  4. </strong>  

四、Service层

注:这一层我们需要注意,我们在DAO层用的是Spring提供的getHibernateTemplate来处理数据,那么我们希望是Spring的自动在这一层关闭连接和添加事务处理,那么我们就必须定义规则,Sping的AOP操作;
INewsService:
[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. package org.liky.ssh.back.service;  
  2. import java.util.List;  
  3. import java.util.Map;  
  4. import org.liky.ssh.pojo.News;  
  5. import org.liky.ssh.pojo.NewsType;  
  6.   
  7. public interface INewsService {  
  8.   
  9.     public List<NewsType> insertPre() throws Exception;  
  10.   
  11.     public void insert(News news) throws Exception;  
  12.   
  13.     public void update(News news) throws Exception;  
  14.   
  15.     public void delete(int id) throws Exception;  
  16.   
  17.     public Map<String, Object> updatePre(int id) throws Exception;  
  18.   
  19.     public Map<String, Object> list(int pageNo, int pageSize, String column,  
  20.             String keyword) throws Exception;  
  21.   
  22. }  
INewsServiceImpl:这里新闻的类型也加入进来
[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. package org.liky.ssh.back.service.impl;  
  2. import java.util.HashMap;  
  3. import java.util.List;  
  4. import java.util.Map;  
  5. import org.liky.ssh.back.service.INewsService;  
  6. import org.liky.ssh.dao.INewsDAO;  
  7. import org.liky.ssh.dao.INewsTypeDAO;  
  8. import org.liky.ssh.pojo.News;  
  9. import org.liky.ssh.pojo.NewsType;  
  10.   
  11. public class NewsServiceImpl implements INewsService {  
  12.     private INewsDAO newsdao;  
  13.     private INewsTypeDAO typedao;  
  14.   
  15.     public void delete(int id) throws Exception {  
  16.         newsdao.doRemove(id);  
  17.     }  
  18.   
  19.     public Map<String, Object> updatePre(int id) throws Exception {  
  20.         Map<String, Object> map = new HashMap<String, Object>();  
  21.         map.put("allType", typedao.findAll());  
  22.         map.put("news", newsdao.findById(id));  
  23.         return map;  
  24.     }  
  25.   
  26.     public void insert(News news) throws Exception {  
  27.         newsdao.doCreate(news);  
  28.     }  
  29.   
  30.     public void update(News news) throws Exception {  
  31.         newsdao.doUpdate(news);  
  32.     }  
  33.   
  34.     public Map<String, Object> list(int pageNo, int pageSize, String column,  
  35.             String keyword) throws Exception {  
  36.         Map<String, Object> map = new HashMap<String, Object>();  
  37.         map.put("allNews", newsdao.findAll(pageNo, pageSize, keyword, column));  
  38.         map.put("allCount", newsdao.getAllCount(keyword, column));  
  39.         return map;  
  40.     }  
  41.   
  42.     public void setNewsdao(INewsDAO newsdao) {  
  43.         this.newsdao = newsdao;  
  44.     }  
  45.     public List<NewsType> insertPre() throws Exception {  
  46.         return typedao.findAll();  
  47.     }  
  48.     public void setTypedao(INewsTypeDAO typedao) {  
  49.         this.typedao = typedao;  
  50.     }  
  51. }  
分别写配置文件:
首先,在applicationContext-service中加入Service的配置:
[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <span style="white-space:pre">    </span><bean id="newsServiceImpl" class="org.liky.ssh.back.service.impl.NewsServiceImpl">  
  2.         <property name="newsdao">  
  3.             <ref bean="newsDAOImpl" />  
  4.         </property>  
  5.         <property name="typedao">  
  6.             <ref bean="newsTypeDAOImpl" />  
  7.         </property>  
  8.     </bean>  
然后,在applicationContext-transaction中加入AOP部分的三个<bean>,这三个bean文件在ssh框架中基本上是固定不变的。
[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <span style="white-space:pre">    </span><bean id="transactionManager"  
  2.         class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  3.         <property name="sessionFactory">  
  4.             <ref bean="sessionFactory" />  
  5.         </property>  
  6.     </bean>  
  7.   
  8.     <bean id="transactionInterceptor"  
  9.         class="org.springframework.transaction.interceptor.TransactionInterceptor">  
  10.         <property name="transactionManager">  
  11.             <ref bean="transactionManager" />  
  12.         </property>  
  13.         <!--   
  14.             配置事务处理的方法和方式  
  15.         -->  
  16.         <property name="transactionAttributes">  
  17.             <props>  
  18.                 <!--  
  19.                     表示所有方法都要关闭连接,并进行事务处理.  
  20.                     PROPAGATION_REQUIRED:如果之前有事务,则将当前操作合并到之前的事务中,如果之前没有事务,则开始一个新的事务。  
  21.                     PROPAGATION_REQUIRED_NEW:无论之前是否有事务,都开始一个新的事务。  
  22.                     PROPAGATION_REQUIRED_NEVER:不使用事务处理,使用自动提交方式。  
  23.                 -->  
  24.                 <prop key="*">PROPAGATION_REQUIRED</prop>  
  25.             </props>  
  26.         </property>  
  27.     </bean>  
  28.   
  29.     <bean  
  30.         class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">  
  31.         <property name="beanNames">  
  32.             <list>  
  33.                 <value>*ServiceImpl</value>  
  34.             </list>  
  35.         </property>  
  36.         <property name="interceptorNames">  
  37.             <list>  
  38.                 <value>transactionInterceptor</value>  
  39.             </list>  
  40.         </property>  
  41.     </bean>  

、完成Action

这里所有的set/get方法省略:所有的private属性,都需要get/set.
[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. import java.io.File;  
  2. import java.util.List;  
  3. import java.util.Map;  
  4.   
  5. import org.apache.struts2.ServletActionContext;  
  6. import org.liky.ssh.back.service.INewsService;  
  7. import org.liky.ssh.pojo.News;  
  8. import org.liky.ssh.pojo.NewsType;  
  9. import org.liky.ssh.util.FileUtils;  
  10. import org.liky.ssh.util.LogUtils;  
  11.   
  12. import com.opensymphony.xwork2.ActionSupport;  
  13.   
  14. public class NewsAction extends ActionSupport {  
  15.   
  16.     private List<NewsType> allType;  
  17.     private INewsService service;  
  18.   
  19.     private News news;  
  20.   
  21.     private File photo;  
  22.     private String photoFileName;  
  23.   
  24.     private String message;  
  25.     private String url;  
  26.   
  27.     private int pageNo = 1;  
  28.     private int pageSize = 5;  
  29.     private String keyword = "";  
  30.     private String column = "title";  
  31.   
  32.     private List<News> allNews;  
  33.     private int count;  
  34.   
  35.     public String updatePre() throws Exception {  
  36.         Map<String, Object> map = service.updatePre(news.getId());  
  37.         allType = (List<NewsType>) map.get("allType");  
  38.         news = (News) map.get("news");  
  39.   
  40.         return "update";  
  41.     }  
  42.   
  43.     public String update() throws Exception {  
  44.         if (photo != null && photo.length() > 0) {  
  45.             // 传了新文件, 删除原有文件  
  46.             String filePath = ServletActionContext.getServletContext()  
  47.                     .getRealPath("/upload")  
  48.                     + "/";  
  49.             FileUtils.dropFile(filePath, news.getPhoto());  
  50.   
  51.             // 传新的  
  52.             String fileName = FileUtils  
  53.                     .saveFile(photo, filePath, photoFileName);  
  54.             news.setPhoto(fileName);  
  55.         }  
  56.   
  57.         service.update(news);  
  58.         LogUtils.addInfo("修改结束...." + news.getId());  
  59.   
  60.         message = "修改成功";  
  61.         url = "pages/back/news_list.action";  
  62.         return "forward";  
  63.     }  
  64.   
  65.     public String delete() throws Exception {  
  66.   
  67.         service.delete(news.getId());  
  68.   
  69.         String filePath = ServletActionContext.getServletContext().getRealPath(  
  70.                 "/upload")  
  71.                 + "/";  
  72.   
  73.         FileUtils.dropFile(filePath, news.getPhoto());  
  74.   
  75.         LogUtils.addInfo("删除结束...." + news.getId());  
  76.   
  77.         message = "删除成功";  
  78.         url = "pages/back/news_list.action";  
  79.         return "forward";  
  80.     }  
  81.   
  82.     public String list() throws Exception {  
  83.         Map<String, Object> map = service.list(pageNo, pageSize, column,  
  84.                 keyword);  
  85.         allNews = (List<News>) map.get("allNews");  
  86.         count = (Integer) map.get("allCount");  
  87.   
  88.         return "list";  
  89.     }  
  90.   
  91.     public String insert() throws Exception {  
  92.         // 取得要保存的真实路径  
  93.         String savePath = ServletActionContext.getServletContext().getRealPath(  
  94.                 "/upload")  
  95.                 + "/";  
  96.         String fileName = FileUtils.saveFile(photo, savePath, photoFileName);  
  97.   
  98.         news.setPhoto(fileName);  
  99.   
  100.         service.insert(news);  
  101.         LogUtils.addInfo("新闻添加完成: " + news.getId() + " --> 添加人是: zhangsan");  
  102.   
  103.         message = "添加成功";  
  104.         url = "index.jsp";  
  105.         return "forward";  
  106.     }  
  107.   
  108.     public String insertPre() throws Exception {  
  109.         allType = service.insertPre();  
  110.   
  111.         return "insert";  
  112.     }  

六、公共类FIleUtils,处理图片的上传的:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. package org.liky.ssh.util;  
  2. import java.io.File;  
  3. import java.io.FileInputStream;  
  4. import java.io.FileOutputStream;  
  5. import java.util.UUID;  
  6.   
  7. public class FileUtils {  
  8.   
  9.     /** 
  10.      * 保存文件功能 
  11.      *  
  12.      * @param orgFile 
  13.      *            要保存的文件 
  14.      * @param savePath 
  15.      *            保存的位置(真实路径) 
  16.      * @param fileName 
  17.      *            原文件名(为了取得扩展名) 
  18.      * @return 生成的文件名 
  19.      * @throws Exception 
  20.      */  
  21.     public static String saveFile(File orgFile, String savePath,  
  22.             String orgFileName) throws Exception {  
  23.         String fileName = UUID.randomUUID().toString();  
  24.         String extName = orgFileName.substring(orgFileName.lastIndexOf("."));  
  25.   
  26.         FileOutputStream os = new FileOutputStream(new File(savePath + fileName  
  27.                 + extName));  
  28.         FileInputStream is = new FileInputStream(orgFile);  
  29.   
  30.         byte[] data = new byte[1024];  
  31.         int length = 0;  
  32.   
  33.         try {  
  34.             while ((length = is.read(data)) != -1) {  
  35.                 os.write(data, 0, length);  
  36.             }  
  37.         } catch (Exception e) {  
  38.             e.printStackTrace();  
  39.         } finally {  
  40.             is.close();  
  41.             os.close();  
  42.         }  
  43.   
  44.         return fileName + extName;  
  45.     }  
  46.   
  47.     public static void dropFile(String filePath, String fileName) {  
  48.         File file = new File(filePath + fileName);  
  49.         if (file.exists()) {  
  50.             file.delete();  
  51.         }  
  52.     }  
  53. }  

、页面的编辑:

先完成struts的配置操作:
[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <struts>  
  2.     <package name="back" namespace="/pages/back" extends="my-default">  
  3.         <action name="news_*" class="newsAction" method="{1}">  
  4.             <result name="insert">/pages/back/news/news_insert.jsp</result>  
  5.             <result name="list">/pages/back/news/news_list.jsp</result>  
  6.             <result name="update">/pages/back/news/news_update.jsp</result>  
  7.             <interceptor-ref name="fileUpload">  
  8.                 <param name="maximumSize">700000</param>  
  9.                 <param name="allowedExtensions">png,jpg,bmp,gif</param>  
  10.             </interceptor-ref>  
  11.             <interceptor-ref name="defaultStack"></interceptor-ref>  
  12.         </action>  
  13.     </package>  
  14. </struts>      
news_list.jsp:
[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <span style="color: rgb(51, 51, 51); white-space: pre; "> </span><span style="color:#333333;"><body>  
  2.         <center>  
  3.             <table border="1" width="80%">  
  4.                 <tr>  
  5.                     <td>  
  6.                         编号  
  7.                     </td>  
  8.                     <td>  
  9.                         标题  
  10.                     </td>  
  11.                     <td>  
  12.                         内容  
  13.                     </td>  
  14.                     <td>  
  15.                         所属分类  
  16.                     </td>  
  17.                     <td>  
  18.                         发布日期  
  19.                     </td>  
  20.                     <td>  
  21.                         图片  
  22.                     </td>  
  23.                     <td>  
  24.                         操作  
  25.                     </td>  
  26.                 </tr>  
  27.                 <s:if test="allNews != null && allNews.size() > 0">  
  28.                     <s:iterator value="allNews" >  
  29.                         <tr>  
  30.                             <td>  
  31.                                 ${id }  
  32.                             </td>  
  33.                             <td>  
  34.                                 ${title }  
  35.                             </td>  
  36.                             <td>  
  37.                                 ${content }  
  38.                             </td>  
  39.                             <td>  
  40.                                 ${newsType.tname}  
  41.                             </td>  
  42.                             <td>  
  43.                                 ${pubDate }  
  44.                             </td>  
  45.                             <td>  
  46.                                 <img src="upload/${photo==null?'nophoto.png':photo}" width="100" height="75"/>  
  47.                             </td>  
  48.                             <td>  
  49.                                 <a href="pages/back/news_updatePre.action?news.id=${id}">修改</a>  
  50.                                 <a href="pages/back/news_delete.action?news.id=${id}&news.photo=${photo}"  
  51.                                     onclick="return window.confirm('确定要删除该数据吗?');">删除</a>  
  52.                             </td>  
  53.                         </tr>  
  54.                     </s:iterator>  
  55.                 </s:if>  
  56.             </table>  
  57. </span><span style="color: rgb(51, 51, 51); white-space: pre; ">        </span><span style="color:#cc0000;">//下面的时分页的组件插入操作,这在我之前的博文中介绍过:</span><span style="color:#333333;">  
  58.             <jsp:include page="/split_page_plugin.jsp">  
  59.                 <jsp:param value="${pageNo}" name="pageNo" />  
  60.                 <jsp:param value="${pageSize}" name="pageSize" />  
  61.                 <jsp:param value="${column}" name="column" />  
  62.                 <jsp:param value="${keyword}" name="keyword" />  
  63.                 <jsp:param value="${count}" name="count" />  
  64.                 <jsp:param value="pages/back/news_list.action" name="URL" />  
  65.                 <jsp:param value="title:标题|content:内容" name="columnData" />  
  66.                 <jsp:param value="1" name="pageStyle" />  
  67.             </jsp:include>  
  68.   
  69.         </center>  
  70.     </body></span>  
news_insert.jsp:
[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <span style="white-space:pre">    </span><body>  
  2.         <center>  
  3.             <s:form action="news_insert.action" method="post" namespace="/pages/back" enctype="multipart/form-data">  
  4.                 新闻标题: <s:textfield name="news.title"></s:textfield> <br/>  
  5.                 新闻内容: <s:textfield name="news.content"></s:textfield> <br/>  
  6.                 发布日期: <s:textfield name="news.pubDate"></s:textfield> <br/>  
  7.                 新闻类型: <s:select list="allType" name="news.newsType.tid" listKey="tid" listValue="tname"></s:select>  
  8.                 <br/>  
  9.                 新闻照片: <s:file name="photo"></s:file>  
  10.                 <br/>  
  11.                 <s:submit value="添加"></s:submit>  
  12.             </s:form>  
  13.         </center>  
  14.     </body>  
news_update.jsp:
[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <span style="white-space:pre">    </span><body>  
  2.         <center>  
  3.             <s:form action="news_update.action" method="post" namespace="/pages/back" enctype="multipart/form-data">  
  4.                 新闻标题: <s:textfield name="news.title"></s:textfield> <br/>  
  5.                 新闻内容: <s:textfield name="news.content"></s:textfield> <br/>  
  6.                 发布日期: <s:textfield name="news.pubDate"></s:textfield> <br/>  
  7.                 新闻类型: <s:select list="allType" name="news.newsType.tid" listKey="tid" listValue="tname"></s:select>  
  8.                 <br/>  
  9.                 新闻照片: <s:file name="photo"></s:file>  
  10.                 <br/>  
  11.                 原照片: <img src="upload/${news.photo==null?'nophoto.png':news.photo }"/>   
  12.                 <br/>  
  13.                 <s:if test="news.photo != null">  
  14.                     <s:hidden name="news.photo"></s:hidden>  
  15.                 </s:if>  
  16.                 <s:hidden name="news.id"></s:hidden>  
  17.                 <s:submit value="添加"></s:submit>  
  18.             </s:form>  
  19.         </center>  
  20.     </body> 
0 0