本文主要是介绍SSH-Day03客户关系管理系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
课程内容:
- 修改Customer
- BaseDao的抽取
- BaseAction的抽取
- 联系人模块Linkman
修改Customer
问题一
在进入
customer/edit.jsp
页面的时候,怎么把customer
对象传递到页面?方法一:valueStack.put(key,value)/valueStack.push(obj)
。方法二:action类都有方法getModel(),struts2会把model存放到context栈中,我们可以通过${model.cust_name}
取出来。
<INPUT class=textbox name="cust_name" value="${model.cust_name }">
问题二
form 表单中select 请选择
一定要加 value="",如果没有value,浏览器会默认设置value=“option显示的值”
<select id="cus_source" name="source.dict_id"><option value="">请选择</option>
</select>
反射获取泛型
怎么获取类上的泛型?
通过反射的方式获得
public class Person<T> {}
public class Student extends Person<User> {}
public class User {
}
Student st = new Student();
//获取父类
Class<?> superclass = st.getClass().getSuperclass();
System.out.println(superclass);
//获取带有泛型的父类
Type genericSuperclass = st.getClass().getGenericSuperclass();
//判断父类是否是ParameterizedType
if(genericSuperclass instanceof ParameterizedType) {ParameterizedType type=(ParameterizedType) genericSuperclass;//取第一个值Class c=(Class) type.getActualTypeArguments()[0];System.out.println(c);//c就是User
}
BaseDao的抽取
把通用的方法抽取到接口中
public interface BaseDao<T> {void add(T t);T findById(Long cust_id);void update(T t);void delete(T t);List<T> findAll();PageBean<T> findByPage(Integer pageCode, Integer pageSize, DetachedCriteria criteria);
}
BaseDaoImpl.java
public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> {public Class clazz;public BaseDaoImpl() {Class c = this.getClass();Type superclass = c.getGenericSuperclass();if(superclass instanceof ParameterizedType) {ParameterizedType parameterizedType=(ParameterizedType) superclass;Type[] type = parameterizedType.getActualTypeArguments();clazz=(Class) type[0];}}@Overridepublic void add(T t) {getHibernateTemplate().save(t);}@Overridepublic T findById(Long id) {T t=(T) getHibernateTemplate().get(clazz, id);return t;}@Overridepublic void update(T t) {getHibernateTemplate().update(t);}@Overridepublic void delete(T t) {getHibernateTemplate().delete(t);}@Overridepublic List<T> findAll() {List<T> list = (List<T>) getHibernateTemplate().find("from "+clazz.getSimpleName());return list;}@Overridepublic PageBean<T> findByPage(Integer pageCode, Integer pageSize, DetachedCriteria criteria) {PageBean<T> page = new PageBean<>();page.setPageCode(pageCode);page.setPageSize(pageSize);criteria.setProjection(Projections.rowCount());List<Number> customerList = (List<Number>) getHibernateTemplate().findByCriteria(criteria);if(customerList!=null && customerList.size()>0) {page.setTotalCount(customerList.get(0).intValue());}criteria.setProjection(null);List<T> list = (List<T>) getHibernateTemplate().findByCriteria(criteria, (pageCode-1)*pageSize, pageSize);page.setBeanList(list);return page;}}
BaseAction
把通用的方法、变量抽取到父类中
public class BaseAction extends ActionSupport {// 设置默认值 当前页码private Integer pageCode = 1;// get()是才有效public void setPageCode(Integer pageCode) {if (pageCode == null) {pageCode = 1;}this.pageCode = pageCode;}public Integer getPageCode() {return pageCode;}// 一页显示多少条数据private Integer pageSize = 2;public void setPageSize(Integer pageSize) {this.pageSize = pageSize;}public Integer getPageSize() {return pageSize;}public void setVS(String key,Object obj) {ActionContext.getContext().getValueStack().set(key, obj);}public void push(Object obj) {ActionContext.getContext().getValueStack().push(obj);}
}
序列化问题
Customer>Linkman是一对多的关系
Customer.java:
public class Customer {private Set<Linkman> linkmans = new HashSet<Linkman>();
}
customer.hbm.xml:
<!-- 让客户放弃外键的维护的权力 -->
<set name="linkmans" inverse="true"><key column="lkm_cust_id"/><one-to-many class="com.itheima.domain.Linkman"/>
</set>
Linkman
public class Linkman {// 编写一个对象,不要自己newprivate Customer customer;
}
linkman.hbm.xml
<many-to-one name="customer" class="com.itheima.domain.Customer" column="lkm_cust_id"/>
这样在修改customer会报错:
解决方法:
public class Customer {@JSONField(serialize=false)private Set<Linkman> linkmans = new HashSet<Linkman>();
}
这篇关于SSH-Day03客户关系管理系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!