整合SSH的简单例子
来源:互联网 发布:软件行业协会会员费 编辑:程序博客网 时间:2024/05/16 19:09
1。新建一个实体类
Person.java
package quickstart.model;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;@Entity // 表示该类能被持久化public class Person { @Id //表示该字段是主键 @GeneratedValue //表示insert时该字段会被Hibernate自动生成 private Integer id; private String lastName;// 字段名默认和数据库中一致,可参考JPA文档 private String firstName; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; }}
2。新建service接口和实现类
PersonService.java
package quickstart.service;import java.util.List;import quickstart.model.Person;public interface PersonService { public List<Person> findAll(); public void save(Person person); public void remove(int id); public Person find(int id);}PersonServiceImpl.javapackage quickstart.service;import java.util.List;import javax.persistence.EntityManager;import javax.persistence.PersistenceContext;import javax.persistence.Query;import org.springframework.transaction.annotation.Transactional;import quickstart.model.Person;@Transactional // @Transactional表示该类的方法将在一个事务中进行public class PersonServiceImpl implements PersonService { private EntityManager em; @PersistenceContext // @PersistenceContext表示Spring创建service实例时将注入一个EntityManager实例到该service实例。public void setEntityManager(EntityManager em) { this.em = em; } @SuppressWarnings("unchecked") public List<Person> findAll() { Query query = getEntityManager().createQuery("select p FROM Person p"); return query.getResultList(); } public void save(Person person) { if (person.getId() == null) { // new em.persist(person); } else { // update em.merge(person); } } public void remove(int id) { Person person = find(id); if (person != null) { em.remove(person); } } private EntityManager getEntityManager() { return em; } public Person find(int id) { return em.find(Person.class, id); }}3。配置web.xml文件web.xml<?xml version="1.0" encoding="UTF-8"?><web-app id="person" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>person</display-name> <!-- Include this if you are using Hibernate --> <filter> <filter-name>Spring OpenEntityManagerInViewFilter</filter-name> <filter-class> org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter </filter-class> </filter> <filter-mapping> <filter-name>Spring OpenEntityManagerInViewFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>如果出现中文乱码,可以在struts配置的前面加上处理乱码的过滤器,spring提供了该过滤器类,具体参见我的资源中的quickstart.war <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher//FilterDispatcher是应用程序的入口点 </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener></web-app>4。在webInf下面建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: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-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"> <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> <bean id="personService" class="quickstart.service.PersonServiceImpl" /> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <property name="database" value="MYSQL" /> <property name="showSql" value="true" /> </bean> </property> </bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost/quickstart" /> <property name="username" value="root" /> <property name="password" value="root" /> </bean> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean> <tx:annotation-driven transaction-manager="transactionManager" /> <bean id="personAction" scope="prototype" class="quickstart.action.PersonAction"> <constructor-arg ref="personService" />// 通过personAction构造函数的参数注入实例personService到personAction </bean></beans>5。建PersonAction.java类
package quickstart.action;import java.util.List;import quickstart.model.Person;import quickstart.service.PersonService;import com.opensymphony.xwork2.Action;import com.opensymphony.xwork2.Preparable;// 该Action是一个POJO,与Struts1不同public class PersonAction implements Preparable { private PersonService service; private List<Person> persons; private Person person; private Integer id; public PersonAction(PersonService service) { this.service = service; } public String execute() { this.persons = service.findAll(); return Action.SUCCESS; } public String save() { this.service.save(person); this.person = new Person(); return execute(); } public String remove() { service.remove(id); return execute(); } public List<Person> getPersons() { return persons; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public void prepare() throws Exception { if (id != null) person = service.find(id); } public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; }}6。在src下面建struts.xml文件<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"><struts> <constant name="struts.objectFactory" value="spring" />//将使用Spring注入在applicationContext.xml中定义的所有的Bean <constant name="struts.devMode" value="true" /> <package name="person" extends="struts-default"> <action name="list" method="execute" class="personAction">//是在applicationContext.xml中定义的Bean的Id <result>pages/list.jsp</result> <result name="input">pages/list.jsp</result> </action> <action name="remove" class="personAction" method="remove"> <result>pages/list.jsp</result> <result name="input">pages/list.jsp</result> </action> <action name="save" class="personAction" method="save"> <result>pages/list.jsp</result> <result name="input">pages/list.jsp</result> </action> </package></struts>7。建两个页面
list.jsp<%@ taglib prefix="s" uri="/struts-tags"%><p>Persons</p><s:if test="persons.size > 0"><table><s:iterator value="persons"><tr id="row_<s:property value="id"/>"><td><s:property value="firstName" /></td><td><s:property value="lastName" /></td><td><s:url id="removeUrl" action="remove"><s:param name="id" value="id" /></s:url><s:a href="%{removeUrl}" theme="ajax" targets="persons">Remove</s:a><s:a id="a_%{id}" theme="ajax" notifyTopics="/edit">Edit</s:a></td></tr></s:iterator></table></s:if>
index.jsp<%@ taglib prefix="s" uri="/struts-tags"%><html><head><s:head theme="ajax" debug="true"/><script type="text/javascript">dojo.event.topic.subscribe("/save", function(data, type, request) { if(type == "load") {dojo.byId("id").value = "";dojo.byId("firstName").value = "";dojo.byId("lastName").value = "";}});dojo.event.topic.subscribe("/edit", function(data, type, request) { if(type == "before") {var id = data.split("_")[1];var tr = dojo.byId("row_"+id);var tds = tr.getElementsByTagName("td");dojo.byId("id").value = id;dojo.byId("firstName").value = dojo.string.trim(dojo.dom.textContent(tds[0]));dojo.byId("lastName").value = dojo.string.trim(dojo.dom.textContent(tds[1]));}});</script></head><body> <s:url action="list" id="descrsUrl"/> <div style="width: 300px;border-style: solid"> <div style="text-align: right;"> <s:a theme="ajax" notifyTopics="/refresh">Refresh</s:a> </div> <s:div id="persons" theme="ajax" href="%{descrsUrl}" loadingText="Loading..." listenTopics="/refresh"/> </div> <br/><div style="width: 300px;border-style: solid"><p>Person Data</p><s:form action="save" validate="true"> <s:textfield id="id" name="person.id" cssStyle="display:none"/><s:textfield id="firstName" label="First Name" name="person.firstName"/><s:textfield id="lastName" label="Last Name" name="person.lastName"/><s:submit theme="ajax" targets="persons" notifyTopics="/save"/></s:form></div></body></html>这样就可以运行了
如果要加入校验,可以使用Struts2提供的方法,在放Action的文件下面建ActionName-validation.xml的文件
<!DOCTYPE validators PUBLIC"-//OpenSymphony Group//XWork Validator 1.0//EN""http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"><validators> <field name="person.firstName"> <field-validator type="requiredstring"> <message>First name is required!</message> </field-validator> </field> <field name="person.lastName"> <field-validator type="requiredstring"> <message>Last name is required!</message> </field-validator> </field></validators>
- 整合SSH的简单例子
- SpringSecurity整合SSH的简单例子
- ssh整合---简单的登录判断例子
- SSH的简单整合
- 简单的SSH整合
- SSH的整合简单实例
- SSH框架的第一个整合例子
- SSH框架的第一个整合例子
- 整合SSH框架最基本的例子
- eclipse maven整合SSH项目(实现简单的连接数据库实现登录小例子)
- ssh整合例子
- 简单的SSH整合登录注册
- SSH整合 简单的增删改查
- SSH整合 简单的增删改查
- SSH整合 简单的增删改查
- SSH整合 简单的增删改查
- 简单的SSH整合登录注册
- SSH整合 简单的增删改查
- 使用Sencha Designer来快速开发web用户界面 -- 初识Designer
- 明年你还爱我吗
- Latex相关资源汇总
- 八拜之交是指哪八拜?
- 需要解决的问题(不断更新)
- 整合SSH的简单例子
- WebOS
- 翻译小窍门-。。。。。
- 翻译小窍门-幸福的我
- [转]hibernate------HQL总结
- 翻译小窍门-曾经的我们.
- 翻译小窍门-高智商的游戏 看谁能过
- CRecordset类
- 翻译小窍门-1秒钟看出你现在的感情状况,非常准很邪门!