Ubuntu开发Struts2应用(7、完成增删查改操作)

由于注重的是整合,所以这里没有写得很完善,没有事务处理,也没有处理业务逻辑的service层等,更适合初学者学习。

1、接口UserDAO以及实现类UserDAOImpl。主要是hibernate和spring的整合,提供数据增删查改的操作。

UserDAO.java

package com.linuxsight.dao;

import java.util.List;
public interface UserDAO {

public void insert(Object o) throws Exception;

public List<Object> list() throws Exception;

public void update(Object o) throws Exception;

public void delete(int id) throws Exception;

public Object queryById(int id) throws Exception;

}
UserDAOImpl.java
package com.linuxsight.daoimpl;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.linuxsight.dao.UserDAO;
import com.linuxsight.vo.User;

public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {

 @Override
 public void insert(Object o) throws Exception {
  this.getHibernateTemplate().save(o);
 }

 @Override
 public List<Object> list() throws Exception {
 return this.getHibernateTemplate().find("from User");
 }

 @Override
 public void update(Object o) throws Exception {
  this.getHibernateTemplate().update(o);
 }

 @Override
 public void delete(int id) throws Exception {
  this.getHibernateTemplate().delete(this.queryById(id));
 }

 @Override
 public Object queryById(int id) throws Exception {
  return this.getHibernateTemplate().get(User.class, id);
 }

}

UserAction.java

package com.linuxsight.action;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.linuxsight.dao.UserDAO;
import com.linuxsight.vo.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport{
 private static final long serialVersionUID = 1L;
 private User user;
 public User getUser() {
  return user;
 }

 public void setUser(User user) {
  this.user = user;
 }

 public UserDAO getUserDao() {
  return userDao;
 }

 public void setUserDao(UserDAO userDao) {
  this.userDao = userDao;
 }

 private UserDAO userDao;
 //插入
 public String insert() throws Exception
 {
  this.userDao.insert(user);
  return SUCCESS;
 }
 //列出
 public String list() throws Exception{
  ActionContext.getContext().put("users", this.userDao.list());
  return "list";
 }
//进入更新页面
 public String goUpdate() throws Exception{
  HttpServletRequest request=ServletActionContext.getRequest();
  int id=Integer.parseInt(request.getParameter("id"));
  user=(User)this.userDao.queryById(id);
  return "update";
 }
 //更新
 public String update() throws Exception{
  this.userDao.update(user);
  return SUCCESS;
 }
 //删除
 public String delete() throws Exception{
  HttpServletRequest request=ServletActionContext.getRequest();
  int id=Integer.parseInt(request.getParameter("id"));
  this.userDao.delete(id);
  return SUCCESS;
 }

 @Override
 public String execute() throws Exception
 {
  return SUCCESS;
 }

}

2、这里的class="userAction"对应applicationContext.xml的bean id="userAction"

struts.xml的action name="user_*"采用通配符,所以本项目对应的访问地址应该是

localhost:8080/s2sh/user_list

spring用的是单例 而struts2每次请求要生成新的  所以加上 scope=prototype以免造成线程不安全

struts.xml

<package name="user"  extends="struts-default">
<span style="color: #ff0000;">&lt;action name="user_*" method="{1}"&gt;</span>
&lt;result name="success" type="redirect"&gt;/user_list.action&lt;/result&gt;
&lt;result name="list"&gt;/list.jsp&lt;/result&gt;
&lt;result name="update"&gt;/update.jsp&lt;/result&gt;
&lt;/action&gt;
&lt;/package&gt;

applicationContext.xml

&lt;bean id="userDao"
scope="singleton"&gt;
&lt;property name="sessionFactory"&gt;
&lt;ref bean="sessionFactory" /&gt;
&lt;/property&gt;
&lt;/bean&gt;

3、列出页面:这里特意分了2种书写方式:JSTL和ONGL。ONGL是另一种表达式语言,通过列出数据循环迭代来比较2者的写法。

list.jsp

JSTL/EL:
&lt;br/&gt;
&lt;c:forEach items="${users}" var="user"&gt;
${user.name}, ${user.age},
&lt;a href="user_goUpdate?id=${user.id }"&gt;更新&lt;/a&gt;&amp;nbsp;&amp;nbsp;
&lt;a href="user_delete?id=${user.id }"&gt;删除&lt;/a&gt;&lt;br/&gt;
&lt;/c:forEach&gt;
&lt;br/&gt;

ONGL:
&lt;br/&gt;
&lt;s:iterator value="#request.users"&gt;
&lt;s:property value="name"/&gt; ,&lt;s:property value="age"/&gt;,
&lt;a href="user_goUpdate?id=&lt;s:property value='id'/&gt;"&gt;更新&lt;/a&gt;
&amp;nbsp;&amp;nbsp;       &lt;a href="user_delete?id=&lt;s:property value='id'/&gt;"&gt;删除&lt;/a&gt;
&lt;br/&gt;
&lt;/s:iterator&gt;

&lt;br/&gt;

4、插入与更新页面,主要掌握struts2 form标签的使用

insert.jsp

 &lt;s:form action="user_insert" method="post"&gt;
    &lt;s:textfield name="user.name" label="名字"&gt;&lt;/s:textfield&gt;
    &lt;s:textfield name="user.age" label="年龄"&gt;&lt;/s:textfield&gt;
 &lt;s:submit&gt;&lt;/s:submit&gt;
  &lt;/s:form&gt;

update.jsp

 &lt;h3&gt;&lt;font color="blue"&gt;更新用户|Struts2整合Hibernate、Spring|Linux视野&lt;/font&gt;&lt;/h3&gt;
    &lt;s:form action="user_update" method="post"&gt;
     &lt;s:textfield name="user.name" label="姓名" value="%{user.name }"&gt;&lt;/s:textfield&gt;
     &lt;s:textfield name="user.age" label="年龄" value="%{user.age}"&gt;&lt;/s:textfield&gt;
    &lt;s:hidden name="user.id" value="%{user.id }"&gt;&lt;/s:hidden&gt;
  &lt;s:submit&gt;&lt;/s:submit&gt;
    &lt;/s:form&gt;

列出页面如下:

我们查看一下数据库,记得是

mysql --default-character-set=utf8 -uroot -p123456

这样就不会看到乱码了

最后看下整个项目

最后是整个SSH2项目的源代码,下载地址:http://115.com/file/anw3ci3y
Linuxs视野:Ubuntu开发Struts2应用-项目源代码-s2sh.zip

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: