首页 > 代码库 > SSH--1

SSH--1

技术分享

package com.etc.action;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.etc.biz.FamilyBiz;
import com.etc.entity.Family;
import com.etc.entity.Pet;
import com.google.gson.Gson;
import com.opensymphony.xwork2.ActionSupport;

public class FamilyAction extends ActionSupport
{
	private List<Family> list ;
	private List<Pet> pets ;
	private FamilyBiz biz;
	private Family family;//a 用于接收来自表单的输入
	private Pet pet;//a 用于接收来自ajax的宠物输入
	public List<Pet> getPets() {
		return pets;
	}

	public void setPets(List<Pet> pets) {
		this.pets = pets;
	}

	
	
	public Pet getPet() {
		return pet;
	}

	public void setPet(Pet pet) {
		this.pet = pet;
	}

	private boolean isshow;
	private String msg;
	
	public boolean isIsshow() {
		return isshow;
	}

	public void setIsshow(boolean isshow) {
		this.isshow = isshow;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

	public Family getFamily() {
		return family;
	}

	public void setFamily(Family family) {
		this.family = family;
	}

	
	
	public List<Family> getList() {
		return list;
	}

	public void setList(List<Family> list) {
		this.list = list;
	}

	public FamilyBiz getBiz() {
		return biz;
	}

	public void setBiz(FamilyBiz biz) {
		this.biz = biz;
	}

	public String findall()
	{
		list = biz.findAll();
		return "findall_success";
	}
	
	public String add()
	{
		//1 让表单输入的宠物list,作为family的set对象
		Set<Pet> ps = new HashSet<Pet>(this.pets);
		for(Pet p:ps)
			p.setFamily(family);
		family.setPets(ps);
		
		try 
		{
			biz.add(family);
		} catch (Exception e) 
		{
			isshow = true;
			msg = "添加过程发现未知异常!"+e.getMessage();
			return "my_error";
		}
		isshow = true;
		msg = "添加成功!";
		return "add_success";
	}
	
	public String toupdate()
	{
		int fid = family.getFid();
		family = biz.findById(fid);
		return "toupdate_success";
	}
	
	public String update()
	{
		//1 让表单输入的宠物list,作为family的set对象
		Set<Pet> ps = new HashSet<Pet>(this.pets);
		for(Pet p:ps)
			p.setFamily(family);
		family.setPets(ps);
		
		try 
		{
			biz.update(family);
		} catch (Exception e) 
		{
			isshow = true;
			msg = "修改过程发现未知异常!"+e.getMessage();
			return "my_error";
		}
		isshow = true;
		msg = "修改成功!";
		return "update_success";
	}
	
	public String addpet() throws IOException
	{
		//让pet和family对象发生关联关系
		pet.setFamily(family);
		
		try 
		{
			int pid = biz.add(pet);
			pet.setPid(pid);//添加成功,使用返回的主键让pet对象完整。
			
		} catch (Exception e) 
		{
			
			
		}
		
		Gson gson = new Gson();

		String json = gson.toJson(pet);//将pet对象转成json字符串返回
		//先设置响应编码
		HttpServletResponse res = ServletActionContext.getResponse();
		res.setContentType("text/html;charset=utf-8");
		PrintWriter pw = res.getWriter();
		//写回客户端
		pw.print(json);
		pw.flush();
		pw.close();
		return "addpet_success";
	}
	public String delpet() throws IOException
	{
		int pid = pet.getPid();
		//family = new Family();
		//pet.setFamily(family);
		String restxt = "";
		try 
		{
			biz.delpet(pid);
			restxt = "1";
		} catch (Exception e) 
		{
			restxt = "0";
		}
		//先设置响应编码
		HttpServletResponse res = ServletActionContext.getResponse();
		res.setContentType("text/html;charset=utf-8");
		PrintWriter pw = res.getWriter();
		//写回客户端
		pw.print(restxt);
		pw.flush();
		pw.close();
		return "delpet_success";
	}
	public String delete()
	{
		int fid = family.getFid();
		try {
			biz.del(fid);			
		} catch (Exception e) 
		{
			isshow = true;
			msg = "删除过程发现未知异常!"+e.getMessage();
			return "my_error";
		}
		isshow = true;
		msg = "删除成功!";
		return "delete_success";

	}
}

  

package com.etc.biz;

import java.util.List;

import com.etc.entity.Family;
import com.etc.entity.Pet;

public interface FamilyBiz {
	List<Family> findAll();
	void add(Family family);
	Family findById(int fid);
	void update(Family family);
	
	//ajax专用,返回添加后的主键
	int add(Pet pet);
	void del(int fid);
	void delpet(int pid);
}

  

package com.etc.biz.imp;

import java.util.List;

import com.etc.biz.FamilyBiz;
import com.etc.dao.FamilyDao;
import com.etc.entity.Family;
import com.etc.entity.Pet;

public class FamilyBizImp implements FamilyBiz 
{
	private FamilyDao dao;
	
	public FamilyDao getDao() {
		return dao;
	}

	public void setDao(FamilyDao dao) {
		this.dao = dao;
	}

	public List<Family> findAll() {
		return dao.findAll();
	}

	public void add(Family family) 
	{
		dao.add(family);		
	}

	public Family findById(int fid) {		
		return dao.findById(fid); 
	}

	public void update(Family family) {
		dao.update(family);
		
	}

	public int add(Pet pet) {
		return dao.add(pet);		
	}

	public void delpet(int pid) 
	{
		dao.delpet(pid);		
	}

	public void del(int fid) {	
		dao.del(fid);
	}
}

  

package com.etc.dao;

import java.util.List;

import com.etc.entity.Family;
import com.etc.entity.Pet;

public interface FamilyDao {
	List<Family> findAll();
	void add(Family family);
	Family findById(int fid);
	void update(Family family);
	
	//ajax专用
	int add(Pet pet);
	void del(int fid);
	void delpet(int pid);	
}

  

package com.etc.dao.imp;

import java.util.List;

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

import com.etc.dao.FamilyDao;
import com.etc.entity.Family;
import com.etc.entity.Pet;

public class FamilyDaoImp extends HibernateDaoSupport implements FamilyDao 
{
	public List<Family> findAll() 
	{
		String  hql  = "from Family";
		return this.getHibernateTemplate().find(hql);
	}

	public void add(Family family)
	{
		this.getHibernateTemplate().save(family);
		
	}

	public Family findById(int fid) {

		return this.getHibernateTemplate().get(Family.class, fid);
	}

	public void update(Family family) {
		this.getHibernateTemplate().update(family);		
	}

	public int add(Pet pet) 
	{
		return (Integer) this.getHibernateTemplate().save(pet);		
	}

	public void delpet(int pid) {
		//先查再删除
		Pet p = this.getHibernateTemplate().get(Pet.class, pid);
		this.getHibernateTemplate().delete(p);		
	}

	public void del(int fid) 
	{
		//先查再删除
		Family f = this.getHibernateTemplate().get(Family.class, fid);
		this.getHibernateTemplate().delete(f);		
	}	
}

  

package com.etc.entity;

import java.util.HashSet;
import java.util.Set;

/**
 * Family entity. @author MyEclipse Persistence Tools
 */

public class Family implements java.io.Serializable {

	// Fields

	private Integer fid;
	private String fname;
	private Float wealth;
	private Set pets = new HashSet(0);

	 
	// Constructors

	/** default constructor */
	public Family() {
	}

	/** minimal constructor */
	public Family(Float wealth) {
		this.wealth = wealth;
	}

	/** full constructor */
	public Family(String fname, Float wealth, Set pets) {
		this.fname = fname;
		this.wealth = wealth;
		this.pets = pets;
	}

	// Property accessors

	public Integer getFid() {
		return this.fid;
	}

	public void setFid(Integer fid) {
		this.fid = fid;
	}

	public String getFname() {
		return this.fname;
	}

	public void setFname(String fname) {
		this.fname = fname;
	}

	public Float getWealth() {
		return this.wealth;
	}

	public void setWealth(Float wealth) {
		this.wealth = wealth;
	}

	public Set getPets() {
		return this.pets;
	}

	public void setPets(Set pets) {
		this.pets = pets;
	}

}

  

package com.etc.entity;

/**
 * Pet entity. @author MyEclipse Persistence Tools
 */

public class Pet implements java.io.Serializable {

	// Fields

	private Integer pid;
	private Family family;
	private String pname;
	private Float price;
	private Integer cohesion;

	// Constructors

	/** default constructor */
	public Pet() {
	}

	/** minimal constructor */
	public Pet(Family family, Float price, Integer cohesion) {
		this.family = family;
		this.price = price;
		this.cohesion = cohesion;
	}

	/** full constructor */
	public Pet(Family family, String pname, Float price, Integer cohesion) {
		this.family = family;
		this.pname = pname;
		this.price = price;
		this.cohesion = cohesion;
	}

	// Property accessors

	public Integer getPid() {
		return this.pid;
	}

	public void setPid(Integer pid) {
		this.pid = pid;
	}

	public Family getFamily() {
		return this.family;
	}

	public void setFamily(Family family) {
		this.family = family;
	}

	public String getPname() {
		return this.pname;
	}

	public void setPname(String pname) {
		this.pname = pname;
	}

	public Float getPrice() {
		return this.price;
	}

	public void setPrice(Float price) {
		this.price = price;
	}

	public Integer getCohesion() {
		return this.cohesion;
	}

	public void setCohesion(Integer cohesion) {
		this.cohesion = cohesion;
	}

}

  

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.etc.entity.Family" table="family" catalog="java">
        <id name="fid" type="java.lang.Integer">
            <column name="fid" />
            <generator class="identity" />
        </id>
        <property name="fname" type="java.lang.String">
            <column name="fname" length="20" />
        </property>
        <property name="wealth" type="java.lang.Float">
            <column name="wealth" precision="12" scale="0" not-null="true" />
        </property>
        <!-- 关联对象集合的配置,默认是lazy=true,延迟加载 .通过cascade配置成关联对象的级联添加-->
                
        <set name="pets" inverse="true" lazy="true" cascade="save-update,delete">
            <key>
                <column name="fid" not-null="true" />
            </key>
            <one-to-many class="com.etc.entity.Pet" />
        </set>
    </class>
</hibernate-mapping>

  

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.etc.entity.Pet" table="pet" catalog="java">
        <id name="pid" type="java.lang.Integer">
            <column name="pid" />
            <generator class="identity" />
        </id>
        <many-to-one name="family" class="com.etc.entity.Family" fetch="select">
            <column name="fid" not-null="true" />
        </many-to-one>
        <property name="pname" type="java.lang.String">
            <column name="pname" length="20" />
        </property>
        <property name="price" type="java.lang.Float">
            <column name="price" precision="12" scale="0" not-null="true" />
        </property>
        <property name="cohesion" type="java.lang.Integer">
            <column name="cohesion" not-null="true" />
        </property>
    </class>
</hibernate-mapping>

  

package com.etc.test;

import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.etc.action.FamilyAction;
import com.etc.entity.Family;
import com.etc.entity.Pet;

public class TestFamliyAction 
{
	BeanFactory fac = new ClassPathXmlApplicationContext("applicationContext.xml");
	FamilyAction action = (FamilyAction) fac.getBean("familyaction");
	
	//@Test
	public void test_findAll()
	{
		System.out.println(action.findall());		
		System.out.println(action.getList().size());
	}
	//@Test
	public void test_add()
	{
		//使用创建对象,模拟表单的输入
		Family f = new Family(10000f);
		f.setFname("辛普森一家");
		
		Set<Pet> pets = new HashSet<Pet>();
		pets.add(new Pet(f,"蜥蜴",20f,5));
		f.setPets(pets);
		
		action.setFamily(f);
		System.out.println(action.add()); //调用添加的控制器方法
		
		//调用查询全部方法,判断有没有成功
		System.out.println(action.findall());		
		System.out.println(action.getList().size());
	}
	@Test
	public void test_delpet() throws IOException
	{
		Pet p = new Pet();
		p.setPid(2);
		action.setPet(p);
		System.out.println(action.delpet());
	}
}

  

applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation= "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="configLocation" value="http://www.mamicode.com/classpath:hibernate.cfg.xml"> </property> </bean> <bean id="dao" class="com.etc.dao.imp.FamilyDaoImp"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <bean id="biz" class="com.etc.biz.imp.FamilyBizImp"> <property name="dao" ref="dao"></property> </bean> <bean id="familyaction" class="com.etc.action.FamilyAction" scope="prototype"> <property name="biz" ref="biz"/> </bean> <bean id="tm" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <tx:advice id="myadvice" transaction-manager="tm"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED" /> <tx:method name="del*" propagation="REQUIRED"/> <tx:method name="update*" propagation="REQUIRED"/> <tx:method name="find*" read-only="true"/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut expression="execution(* com.etc.biz.*.*(..))" id="mypc"/> <aop:advisor advice-ref="myadvice" pointcut-ref="mypc"/> </aop:config> </beans>

  

struts.xml:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <constant name="struts.devMode" value="http://www.mamicode.com/true" /> <package name="p" namespace="/" extends="struts-default"> <action name="*" class="familyaction" method="{1}"> <result name="findall_success"> /showlist.jsp </result> <result name="add_success" type="chain"> <param name="actionName">findall</param> <param name="namespace">/</param> </result> <result name="toupdate_success"> /update_family.jsp </result> <result name="update_success" type="chain"> <param name="actionName">findall</param> <param name="namespace">/</param> </result> <result name="addpet_success" type="stream"> </result> <result name="delpet_success" type="stream"> </result> <result name="delete_success" type="chain"> <param name="actionName">findall</param> <param name="namespace">/</param> </result> <result name="input"> /show_input_error.jsp </result> <result name="my_error"> /show_my_error.jsp </result> </action> </package> </struts>

  

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <context-param>  <!-- 配置全局的配置参数 ,spring配置文件的位置 --> 
  	<param-name>
  	contextConfigLocation
  	</param-name>
  	<param-value>
  	classpath:applicationContext.xml
  	</param-value>
  </context-param>
  <!-- 通过spring提供的web监听器来启动对象工厂 -->
  <listener>
  	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  </listener>
  <!-- 声明1个延迟加载过滤器 -->
  <filter>
  	<filter-name>lazyFilter</filter-name>	
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
    <init-param>
    	<param-name>singleSession</param-name>
    	<param-value>false</param-value>
    </init-param>
  </filter>
  <!--设定过滤器只对.action请求有效 -->
  <filter-mapping>
  <filter-name>lazyFilter</filter-name>
  <url-pattern>*.action</url-pattern>
  </filter-mapping>
  <filter>
  	<filter-name>struts2</filter-name>
  	<filter-class>
  		org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  	</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>struts2</filter-name>
  	<url-pattern>*.action</url-pattern>
  </filter-mapping></web-app>

  

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="http://www.mamicode.com/">
    
    <title>My JSP ‘add_famliy.jsp‘ starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="http://www.mamicode.com/styles.css">
	-->

  </head>
  
  <body>
  
        <form action="add.action" method="post">
    家庭名: <input name="family.fname" /> <br/>
  财产:   <input name="family.wealth"/><br/>
宠物名:  <input name="pets[0].pname">
宠物价格:  <input name="pets[0].price">
亲密度:  <input name="pets[0].cohesion">
 <input type="button" value="http://www.mamicode.com/+"/>
<br/>
     <input type="submit" value="http://www.mamicode.com/添加"/>
    </form>
  </body>
</html>

  

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="http://www.mamicode.com/">
    
    <title>My JSP ‘showlist.jsp‘ starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="http://www.mamicode.com/styles.css">
	-->

  </head>
  
  <body>
   <script>
   alert(‘输入有误!‘);
   history.go(-1);
   </script>
  
	<s:fielderror/>	       
        
  </body>
</html>

  

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="http://www.mamicode.com/">
    
    <title>My JSP ‘showlist.jsp‘ starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="http://www.mamicode.com/styles.css">
	-->

  </head>
  
  <body>
   <script>
   alert("${msg}");
   location.href="http://www.mamicode.com/findall.action";
   </script>
  
	<s:fielderror/>	       
        
  </body>
</html>

  

<%@ page language="java" import="java.util.*,com.etc.entity.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="http://www.mamicode.com/">
    
    <title>My JSP ‘showlist.jsp‘ starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="http://www.mamicode.com/styles.css">
	-->

  </head>
  <script>
  	function showmsg(isshow,msg)
  	{
  		if(isshow)
  			alert(msg);
  	}
  
  </script>
  <body onl oad="showmsg(${isshow},‘${msg}‘)">
        家庭信息<br/>
        <table border="1">
        <tr>
        	<th>编号</th>
        	<th>名称</th>
        	<th>资产</th>
        	<th>宠物数</th>
        	<th>操作</th>
        </tr>
       <s:iterator value="http://www.mamicode.com/list" var="f">
       		<tr>
       			<td>${f.fid }</td>
       			<td>${f.fname }</td>
       			<td>${f.wealth }</td>
       			<td>
       				<%= ((Family) request.getAttribute("f")).getPets().size() %>
       			</td>
       			<td><a href="http://www.mamicode.com/delete.action?family.fid=${f.fid}">删除</a> 
       			
       			<a href="http://www.mamicode.com/toupdate.action?family.fid=${f.fid}">修改</a></td>       		
       		</tr>
       
       </s:iterator>
        
        </table>
        <br/>
        <a href="http://www.mamicode.com/add_family.jsp">添加</a>
        
  </body>
</html>

  

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<style>
input 
{
	width: 60px;	
}

</style>
	<head>
		<base href="http://www.mamicode.com/">

		<title>My JSP ‘add_famliy.jsp‘ starting page</title>

		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">
		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
		<meta http-equiv="description" content="This is my page">
		<!--
	<link rel="stylesheet" type="text/css" href="http://www.mamicode.com/styles.css">
	-->
	</head>
	<script type="text/javascript" src="http://www.mamicode.com/js/jquery.js">
	</script>
	<script>	
	$(document).ready(
		function()
		{
			$("#add").click(
				function()
				{
					addnew();
				}
			);
		}
	
	)
	function addnew()
	{
		var pname = window.prompt("宠物名","宠物名");
		if(pname==null)
			return;
		var price = window.prompt("价格","100");
		if(price==null)
			return;
		var cohesion = window.prompt("亲密度","50");
		if(price==null)
			return;
		var msg = pname+","+price+","+cohesion+",确认添加 ?";
		
		if (window.confirm(msg))
			send_ajax_add_request(pname,price,cohesion);										
	}
	function send_ajax_add_request(pname,price,cohesion)
	{
		var paras = "pet.pname="+pname+"&pet.price="
		+price+"&pet.cohesion="+cohesion+"&family.fid=${family.fid}";
		$.ajax(
			{
				type:"post",
				url:"addpet.action",
				data:paras,
				dataType:"json",
				success:function(obj)
				{
					var old = $("#sp").html();
					var html = "<span id=‘inner_sp_"+obj.pid+"‘>" 
						+"编号:  <input name=‘pets["+petcount+"].pid‘ value=http://www.mamicode.com/‘"+obj.pid+"‘ readonly=‘readonly‘>"
				        +"宠物名:  <input name=‘pets["+petcount+"].pname‘ value=http://www.mamicode.com/‘"+obj.pname+"‘>"
				 		+"宠物价格:  <input name=‘pets["+petcount+"].price‘ value=http://www.mamicode.com/‘"+obj.price+"‘>"
						+"亲密度:  <input name=‘pets["+petcount+"].cohesion‘ value=http://www.mamicode.com/‘"+obj.cohesion+"‘>"
						+"<input type=‘button‘ value=http://www.mamicode.com/‘删除‘ onclick=‘send_ajax_delete_request("+obj.pid+")‘/><br/>"
						+"</span>";
					$("#sp").html(old+html);
					
					petcount++;					
				}
			}
		);
	}
	
	function send_ajax_delete_request(pid)
	{
		var paras = "pet.pid="+pid;
		var url = "delpet.action";
		$.post(url, { "pet.pid": pid},
   			function(txt){
   				if(txt=="1")
     				$("#inner_sp_"+pid).remove();
   			});	
	}
	
	</script>
	<body>

		<form action="update.action" method="post"> 
			编号: 
			<input name="family.fid" readonly="readonly" value="http://www.mamicode.com/${family.fid }" />
			<br />
			家庭名:
			<input name="family.fname" value="http://www.mamicode.com/${family.fname }"/>
			<br />
			财产:
			<input name="family.wealth" value="http://www.mamicode.com/${family.wealth }"/>
			<br />
			
			<s:set var="i" value="http://www.mamicode.com/0"/>
			<span id="sp">
			<s:iterator value="http://www.mamicode.com/family.pets" var="p">
				<span id="inner_sp_${p.pid}">
				编号:  <input name="pets[${i}].pid" value="http://www.mamicode.com/${p.pid }" readonly="readonly">
				宠物名:  <input name="pets[${i}].pname" value="http://www.mamicode.com/${p.pname }">
				宠物价格:  <input name="pets[${i}].price" value="http://www.mamicode.com/${p.price }">
				亲密度:  <input name="pets[${i}].cohesion" value="http://www.mamicode.com/${p.cohesion }">
				<s:set var="i" value="http://www.mamicode.com/#attr.i+1"/>
				<input type="button" value="http://www.mamicode.com/删除" onclick="send_ajax_delete_request(${p.pid })" /><br/>
				</span>
			</s:iterator>
			</span>
<script>
var petcount = ${i}; //记录总的宠物个数
</script>
			
			<br />
			<input id="add" type="button" value="http://www.mamicode.com/添加宠物"/><br/>
			<input type="submit" value="http://www.mamicode.com/修改" />
		</form>
	</body>
</html>

  

SSH--1