Structs中:删除功能的实现
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
/**
* <strong>DeleteForm</strong> handles the form
* that the user will use to search the database.
*/
public final class DeleteForm extends ActionForm {
private String name = null;
private String phone = null;
private String address = null;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public void reset(ActionMapping mapping, HttpServletRequest request) {
this.name = null;
this.phone = null;
this.address=null;
}
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
if (
((name == null) || (name.length() < 1))
&&((phone == null)|| (phone.length() < 1))
&&((address == null) || (address.length() < 1))
)
errors.add("search", new ActionMessage("error.searchcriteria.required"));
return errors;
}
}
Action 文件
import java.io.IOException;
import java.util.Locale;
import java.util.Properties;
import java.util.ResourceBundle;
import java.util.MissingResourceException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.util.MessageResources;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import addressbook.Constants;
import addressbook.forms.DeleteForm;
import addressbook.model.AddressBookBean;
/**
* <strong>DeleteAction</strong> will take the search parameters
* specified by the user and create the Sql statement to be used
* by the appropriate forward.
*/
public final class DeleteAction extends AbstActionBase {
private Log log =
LogFactory.getLog(this.getClass().getName());
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
Locale locale = getLocale(request);
MessageResources messages = getResources(request);
ActionMessages errors = new ActionMessages();
String name = ((DeleteForm) form).getName();
String phone = ((DeleteForm) form).getPhone();
String address=((DeleteForm)form).getAddress();
if (!errors.isEmpty()) {
saveErrors(request, errors);
return (new ActionForward(mapping.getInput()));
}
String strSql = new String("DELETE FROM " + Constants.TABLENAME + " WHERE ");
/*
if (!name.equals(""))
strSql = strSql + "name LIKE '"+ name +"%' AND";
if (!phone.equals(""))
strSql = strSql + " phone LIKE '"+ phone +"%' AND";
if (!address.equals(""))
strSql = strSql + " address LIKE '"+ address +"%'";
else
strSql = strSql.substring(0,strSql.length()-3);
strSql = strSql + "ORDER by ID";
*/
strSql = strSql + "name='" + name + "'";
strSql = strSql.substring(0,strSql.length());
try
{
AddressBookBean bean=new AddressBookBean(name,phone,address);
bean.delete(strSql);
}
catch(Exception ex)
{
ex.printStackTrace(System.out);
errors.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("error.delete.failed"));
}
HttpSession session = request.getSession();
if (log.isDebugEnabled()) {
log.debug("SearchAction session = " + session);
log.debug("SearchAction strSql = " + strSql);
}
session.setAttribute(Constants.SQLSTMT_KEY, strSql);
ActionMessages actionMessages = new ActionMessages();
actionMessages.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("record.Deleted"));
saveMessages(request,actionMessages);
// return (mapping.findForward(Constants.FORWARD_CONFIRMATION));
return (mapping.findForward(Constants.FORWARD_SUCCESS));
}
}
模型文件:
import java.sql.*;
import java.util.*;
import addressbook.Constants;
public class AddressBookBean {
String name;
String phone;
String address;
public AddressBookBean() {
}
public AddressBookBean(String name,String phone,String address) {
this.name=name;
this.phone=phone;
this.address=address;
}
public String getName(){
return name;
}
public String getPhone(){
return phone;
}
public String getAddress(){
return address;
}
public void setName(String name){
this.name=name;
}
public void setPhone(String phone){
this.phone=phone;
}
public void setAddress(String address){
this.address=address;
}
public void insert()throws Exception{
Connection con= DbUtil.connectToDb();
PreparedStatement pStmt=null;
try{
pStmt=con.prepareStatement("INSERT INTO " + Constants.TABLENAME +
" (name,phone,address)"+
" values(?,?,?)");
con.setAutoCommit(false);
pStmt.setString(1,name);
pStmt.setString(2,phone);
pStmt.setString(3,address);
int j=pStmt.executeUpdate();
con.commit();
}
catch(Exception ex)
{
try{
con.rollback();
}catch(SQLException sqlex){
sqlex.printStackTrace(System.out);
}
throw ex;
}finally{
try{
pStmt.close();
con.close();
}catch(Exception e){e.printStackTrace();}
}
}
public static Vector delete(String strSql)throws Exception{
Vector addressbookBeans=new Vector();
Connection con= DbUtil.connectToDb();
PreparedStatement pStmt=null;
ResultSet rs=null;
try{
pStmt=con.prepareStatement(strSql);
con.setAutoCommit(false);
pStmt.executeUpdate();
con.commit();
rs=pStmt.executeQuery();
while(rs.next())
addressbookBeans.add(new AddressBookBean(
rs.getString("NAME"),rs.getString("PHONE"),rs.getString("ADDRESS")));
return addressbookBeans;
}finally{
try{
rs.close();
pStmt.close();
con.close();
}catch(Exception e){e.printStackTrace();}
}
}
public static Vector search(String strSql)throws Exception{
Vector addressbookBeans=new Vector();
Connection con= DbUtil.connectToDb();
PreparedStatement pStmt=null;
ResultSet rs=null;
try{
pStmt=con.prepareStatement(strSql);
rs=pStmt.executeQuery();
while(rs.next())
addressbookBeans.add(new AddressBookBean(
rs.getString("NAME"),rs.getString("PHONE"),rs.getString("ADDRESS")));
return addressbookBeans;
}finally{
try{
rs.close();
pStmt.close();
con.close();
}catch(Exception e){e.printStackTrace();}
}
}
}
//JSP页面
<%@ include file="taglibs.jsp" %>
<app:validateSession/>
<html:errors/>
<html:form action="/delete.do" focus="title">
<center>
<table border="0" cellspacing="2" cellpadding="2" width="100%">
<tr>
<td align="right"> <bean:message key="prompt.name"/></td>
<td><html:text property="name" size="25" maxlength="25"/></td>
</tr>
<tr>
<td align="right"> <bean:message key="prompt.phone"/></td>
<td><html:text property="phone" size="25" maxlength="10"/></td>
</tr>
<tr>
<td align="right"> <bean:message key="prompt.address"/></td>
<td><html:text property="address" size="25" maxlength="50"/></td>
</tr>
<tr>
<td align="right">
<html:submit property="submit" >
<bean:message key="button.delete"/>
</html:submit>
</td>
<td align="left">
<html:reset >
<bean:message key="button.reset"/>
</html:reset>
</td>
</tr>
</table>
</center>
</html:form>
<html:link forward="mainMenu"><bean:message key="goto.mainMenu"/></html:link>