速動畫教程第十五集

?

本集為第十二集Struts+Spring+Hibernate練習(完整) 續集

?

下載地址:http://sonic.peakle.net/download/sonic015.rar

?

將增加以下部份內容

?

注冊新用戶,用戶瀏覽、刪除用戶

?

現在導入原工程

?

打開 UserDAO.java 文件,增加以下方法,此方法為增加用戶

public interface UserDAO {

??? public abstract boolean isValidUser(String username, String password);

??? public abstract boolean addUser(User user);

}

?

打開 UserDAOImp.java 文件,添加接口方法的實現,并為方法編寫以下內容:

??? public boolean addUser(User user) {

??????? try {

??????????? this.getHibernateTemplate().save(user);

??????? } catch (Exception e) {

??????????? System.out.println(e.getMessage());

??????????? return false;

??????? }

??????? return true;

??? }

?

?

按下 Ctrl + N 使用向導創建 add.jsp AddForm( 動態 ) AddAction.java 文件 這是注冊新用戶的 Action

?

修改配置內容如下

< action

????? attribute = "addForm"

????? input = "/add.jsp"

????? name = "addForm"

????? path = "/add"

????? scope = "request"

????? validate="true"

????? type = " org.springframework.web.struts.DelegatingActionProxy " />

?

第一句實現了必須對提交的數據進行驗證

第二句實現了和spring集成

?

修改 AddAction.java 文件,內容如下:

?

??? 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();

??????? }

??? }

?

關于在 Action 中使用 User 對像 我在這里沒有使用 IoC 方式進行管理 這不好 希望大家在正式應用中使用。

?

spring 配置文件 applicationContext.xml 中加入以下內容

?????? < 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 文件的首行 替換為以下內容 目的是為了使用 UTF-8 的編碼格式顯示頁面

<%@ page language = "java" contentType = "text/html; charset=UTF-8" %>

?

修改 validation.xml 文件 加入以下內容

??????? < form name = "addForm" >

?????????? < field property = "username" depends = "required" >

????????????? < arg0 key = "prompt.username" />

?????????? </ field >

?????????? < field property = "password" depends = "required" >

????????????? < arg0 key = "prompt.password" />

?????????? </ field >

?????? </ form >

?

?

現在整個 AddUser 已經完成,如果你覺得不放心的話可以在這里停一停先進行這一段的測試!

?

創建一個Action用于查詢數據,名稱為 find

?

創建 display.jsp 文件,用于顯示所有用戶

?

創建一個 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 文件 內容如下

??? 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 中加入以下內容

?????? < bean name = "/find" class = "com.test.struts.action.FindAction" singleton = "false" >

?????? < property name = "userDAO" >

?????????? < ref bean = "userDAOProxy" />

?????? </ property >

??? </ bean >

?

修改 display.jsp 文件 內容如下

<%@ 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 >

?

現在整個 Display 已經完成,如果你覺得不放心的話可以在這里停一停先進行這一段的測試!

?

新建一個 Action 用于刪除選中的用戶,name:del

?

修改 struts-config.xml 文件中的以下內容為:

< 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 文件 添加新增的兩個方法 并編寫以下內容

??? 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 文件 內容如下

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 中加入以下內容

?????? < 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 >

?

?

代碼已經全部完成,可以進行測試了!!!

?

在添加用戶的過程中出現了錯誤,就是沒有驗證就直接提交了,并能夠提交空的用戶!

這里解決的方式有多種,修改程是肯定的了,還有就是在設計數據庫的時候加上限制如將 username 和 password 為字設置為 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 >

?

可以了,這集就講到這里了!下集再見!