速動(dòng)畫(huà)教程第十五集
本集為第十二集Struts+Spring+Hibernate練習(xí)(完整) 的 續(xù)集
下載地址:http://sonic.peakle.net/download/sonic015.rar
將增加以下部份內(nèi)容
注冊(cè)新用戶,用戶瀏覽、刪除用戶
現(xiàn)在導(dǎo)入原工程
打開(kāi) UserDAO.java 文件,增加以下方法,此方法為增加用戶
public interface UserDAO {
public abstract boolean isValidUser(String username, String password);
public abstract boolean addUser(User user);
}
打開(kāi) UserDAOImp.java 文件,添加接口方法的實(shí)現(xiàn),并為方法編寫(xiě)以下內(nèi)容:
public boolean addUser(User user) {
try {
this.getHibernateTemplate().save(user);
} catch (Exception e) {
System.out.println(e.getMessage());
return false;
}
return true;
}
按下 Ctrl + N ,使用向?qū)?chuàng)建 add.jsp 、AddForm(動(dòng)態(tài))、AddAction.java文件,這是注冊(cè)新用戶的Action
修改配置內(nèi)容如下:
<action
attribute="addForm"
input="/add.jsp"
name="addForm"
path="/add"
scope="request"
validate="true"
type="org.springframework.web.struts.DelegatingActionProxy" />
第一句實(shí)現(xiàn)了必須對(duì)提交的數(shù)據(jù)進(jìn)行驗(yàn)證
第二句實(shí)現(xiàn)了和spring集成
修改 AddAction.java 文件,內(nèi)容如下:
private UserDAO userDAO;
public UserDAO getUserDAO() {
return userDAO;
}
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
DynaActionForm addForm = (DynaActionForm) form;
User user=new User();
user.setUsername(addForm.getString("username"));
user.setPassword(addForm.getString("password"));
addForm.set("password", null);
if (userDAO.addUser(user)) {
return mapping.findForward("indexGo");
} else {
return mapping.getInputForward();
}
}
關(guān)于在Action中使用 User 對(duì)像,我在這里沒(méi)有使用 IoC 方式進(jìn)行管理,這不好,希望大家在正式應(yīng)用中使用。
在spring配置文件(applicationContext.xml)中加入以下內(nèi)容:
<bean name="/add" class="com.test.struts.action.AddAction" singleton="false">
<property name="userDAO">
<ref bean="userDAOProxy" />
</property>
</bean>
修改 index.jsp 文件
<html>
<head>
<title>Struts+Spring+Hibernate</title>
</head>
<body>
<a href="login.jsp">Login</a>
<br>
<a href="add.jsp">Add User</a>
</body>
</html>
修改 add.jsp 文件的首行,替換為以下內(nèi)容,目的是為了使用UTF-8的編碼格式顯示頁(yè)面
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
修改 validation.xml 文件,加入以下內(nèi)容:
<form name="addForm">
<field property="username" depends="required">
<arg0 key="prompt.username" />
</field>
<field property="password" depends="required">
<arg0 key="prompt.password" />
</field>
</form>
現(xiàn)在整個(gè) AddUser 已經(jīng)完成,如果你覺(jué)得不放心的話可以在這里停一停先進(jìn)行這一段的測(cè)試!
創(chuàng)建一個(gè)Action用于查詢數(shù)據(jù),名稱(chēng)為 find
創(chuàng)建 display.jsp 文件,用于顯示所有用戶
創(chuàng)建一個(gè) forward 指向 display.jsp 選中 redirect
修改 UserDAO.java 文件,增加 findAllUser() 方法,代碼如下:
public abstract List findAllUser();
修改 UserDAOImp.java 文件,增加 findAllUser() 方法,代碼如下:
public List findAllUser() {
List users=this.getHibernateTemplate().find("from User u");
if(users.size()>0)
return users;
return null;
}
修改 struts-config.xml 文件
<action path="/find" type="org.springframework.web.struts.DelegatingActionProxy" />
修改 FindAction.java 文件,內(nèi)容如下:
private UserDAO userDAO;
public UserDAO getUserDAO() {
return userDAO;
}
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
List users=userDAO.findAllUser();
if(users!=null){
HttpSession session=request.getSession();
session.setAttribute("users",users);
return mapping.findForward("displayGo");
}
return mapping.getInputForward();
}
在spring配置文件(applicationContext.xml)中加入以下內(nèi)容:
<bean name="/find" class="com.test.struts.action.FindAction" singleton="false">
<property name="userDAO">
<ref bean="userDAOProxy" />
</property>
</bean>
修改 display.jsp 文件,內(nèi)容如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic"%>
<html>
<head>
<title>DISPLAY</title>
</head>
<body>
<logic:present name="users">
<form action="del.do">
<table border="1">
<logic:iterate id="element" name="users">
<tr><td width="100">
<input type="radio" name="select" value="<bean:write name="element" property="id"/>">
<bean:write name="element" property="username"/>
</td></tr>
</logic:iterate>
</table>
<INPUT type="submit" name="Submit" value="submit">
</form>
</logic:present>
</body>
</html>
現(xiàn)在整個(gè) Display 已經(jīng)完成,如果你覺(jué)得不放心的話可以在這里停一停先進(jìn)行這一段的測(cè)試!
新建一個(gè) Action 用于刪除選中的用戶,name:del
修改 struts-config.xml 文件中的以下內(nèi)容為:
<action path="/del" type="org.springframework.web.struts.DelegatingActionProxy" />
修改 UserDAO.java 文件,增加以下方法
public interface UserDAO {
public abstract boolean isValidUser(String username, String password);
public abstract boolean addUser(User user);
public abstract List findAllUser();
public abstract boolean delUser(Integer lid);
}
修改 UserDAOImp.java 文件,添加新增的兩個(gè)方法,并編寫(xiě)以下內(nèi)容:
public boolean delUser(Integer lid) {
try {
User user=(User)this.getHibernateTemplate().load(User.class,lid);
this.getHibernateTemplate().delete(user);
} catch (Exception e) {
System.out.println(e.getMessage());
return false;
}
return true;
}
修改 DelAction.java 文件,內(nèi)容如下:
public class DelAction extends Action {
private UserDAO userDAO;
public UserDAO getUserDAO() {
return userDAO;
}
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
Integer selid=Integer.valueOf(request.getParameter("select"));
if(userDAO.delUser(selid))
return mapping.findForward("indexGo");
return mapping.getInputForward();
}
}
在spring配置文件(applicationContext.xml)中加入以下內(nèi)容:
<bean name="/del" class="com.test.struts.action.DelAction" singleton="false">
<property name="userDAO">
<ref bean="userDAOProxy" />
</property>
</bean>
修改 index.jsp 文件
<html>
<head>
<title>Struts+Spring+Hibernate</title>
</head>
<body>
<a href="login.jsp">Login</a>
<br>
<a href="add.jsp">Add User</a>
<br>
<a href="find.do">Display</a>
</body>
</html>
代碼已經(jīng)全部完成,可以進(jìn)行測(cè)試了!!!
在添加用戶的過(guò)程中出現(xiàn)了錯(cuò)誤,就是沒(méi)有驗(yàn)證就直接提交了,并能夠提交空的用戶!
這里解決的方式有多種,修改程是肯定的了,還有就是在設(shè)計(jì)數(shù)據(jù)庫(kù)的時(shí)候加上限制如將 username 和 password 為字設(shè)置為 not null
將修改這一段
<form-bean name="addForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="password" type="java.lang.String" />
<form-property name="username" type="java.lang.String" />
</form-bean>
修改后:
<form-bean name="addForm" type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="password" type="java.lang.String" />
<form-property name="username" type="java.lang.String" />
</form-bean>
可以了,這集就講到這里了!下集再見(jiàn)!