新增客户==数据字典==用小海豚执行base_dict.sql 得到一张新的表---==数据字典表== 作用:用于枚举项目中有限个数的字典项 在customer表中,像信息来源,用户等级,用户类型等,以前都是普通的文本输入框.但是我们可以设置成可以从有限的字段中选择出来的 数据字典表可以把项目中的所有枚举统一在一张表中
创建BaseDict对象"BaseDict.class"
public class BaseDict {
private String dict_id;
private String dict_type_code;
private String dict_type_name;
private String dict_item_name;
private String dict_item_code;
private String dict_memo;
private Integer dict_sort;
private Character dict_enable
"set and get method"
}<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.itcast.domain" >
<class name="BaseDict" table="base_dict" >
<id name="dict_id" >
<generator class="assigned"></generator>
</id>
<property name="dict_type_code" ></property>
<property name="dict_type_name" ></property>
<property name="dict_item_name" ></property>
<property name="dict_item_code" ></property>
<property name="dict_memo" ></property>
<property name="dict_sort" ></property>
<property name="dict_enable" ></property>
</class>
</hibernate-mapping><!-- 多对一 -->
<many-to-one name="cust_source" column="cust_source" class="BaseDict" ></many-to-one>
<many-to-one name="cust_industry" column="cust_industry" class="BaseDict" ></many-to-one>
<many-to-one name="cust_level" column="cust_level" class="BaseDict" ></many-to-one>ajax加载数据字典下拉选@Override
public String execute() throws Exception {
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(BaseDict.class);
detachedCriteria.add(Restrictions.eq("dict_type_code", dict_type_code));
List<BaseDict> list = baseDictService.getListByDictTypeCode(detachedCriteria);
Gson gson = new Gson();
String json = gson.toJson(list);
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/json;charset=utf-8");
response.getWriter().write(json);
return null;
}"service直接调用BaseDaoImpl的方法"
@Override
public List<BaseDict> getListByDictTypeCode(DetachedCriteria detachedCriteria) {
List<BaseDict> list = baseDictDao.getList(detachedCriteria);
return list;
}ajax加载数据字典下拉选前台js部分js最好写一行测一行 使用jQuery就是打开文档复制粘贴的过程
//使用ajax加载数据字典,生成select
//参数1: 数据字典类型 (dict_type_code)
//参数2: 将下啦选放入的标签id
//参数3: 生成下拉选时,select标签的name属性值
//参数4: 需要回显时,选中哪个option
function loadSelect(typecode,positionId,selectname,selectedId){
//1 创建select对象,将name属性指定
var $select = $("<select name="+selectname+" ></select>");
//2 添加提示选项
$select.append($("<option value='' >---请选择---</option>"));
//3 使用jquery 的ajax 方法,访问后台Action
$.post("${pageContext.request.contextPath}/BaseDictAction", { dict_type_code:typecode},
function(data){
//遍历
//4 返回json数组对象,对其遍历
$.each( data, function(i, json){
// 每次遍历创建一个option对象
var $option = $("<option value='"+json['dict_id']+"' >"+json["dict_item_name"]+"</option>");
if(json['dict_id'] == selectedId){
//判断是否需要回显 ,如果需要使其被选中
$option.attr("selected","selected");
}
//并添加到select对象
$select.append($option);
});
},"json");
//5 将组装好的select对象放入页面指定位置
$("#"+positionId).append($select);
}保存客户后台逻辑public String add() throws Exception {
//1 调用Service,保存Customer对象
cs.save(customer);
//2 重定向到客户列表Action
return "toList";
}在service中调用dao分别取出3个数据字典对象设置到customer里,然后再保存customer 我们从action传给service的customer中,3个数字字典对象都有id,是游离状态的
@Override
public void save(Customer customer) {
"1 维护Customer与数据字典对象的关系,由于struts2参数封装,会将参数封装到数据字典的id属性."
"那么我们无需手动维护关系"
"2 调用Dao保存客户"
cd.saveOrUpdate(customer);
}扩展-struts2文件上传之前用的是FileUpLoad来进行文件上传 文件上传有4个要求 后台代码
"上传的文件会自动封装到File对象"
"在后台提供一个与前台input type=file组件 name相同的属性"
private File photo;
"在提交键名后加上固定后缀FileName,文件名称会自动封装到属性中"
private String photoFileName;
"在提交键名后加上固定后缀ContentType,文件MIME类型会自动封装到属性中 "
private String photoContentType;
public String add() throws Exception {
if(photo!=null){
System.out.println("文件名称:"+photoFileName);
System.out.println("文件类型:"+photoContentType);
//将上传文件保存到指定位置
photo.renameTo(new File("E:/upload/haha.jpg"));
}
//---------------------------------------------------------------------
//1 调用Service,保存Customer对象
cs.save(customer);
//2 重定向到客户列表Action
return "toList";
}
"set和get方法"扩展-struts2文件上传原理struts2有一个fileupload拦截器 拦截器会判断是否是多段式上传,如果不是多段式就放行 如果是多段式就获取信息放入集合中 然后拼接字符串,最后放入actionContext中 然后在params拦截器赋值
客户修改在列表页面对用户进行修改 根据id获得customer对象,然后回写到页面 用add.jsp同时用于添加和修改操作
public String toEdit() throws Exception {
//1调用Service根据id获得客户对象
Customer c = cs.getById(customer.getCust_id());
//2 将客户对象放置到request域,并转发到编辑页面
ActionContext.getContext().put("customer", c);
return "edit";
}<s:property value="#customer==null?'添加':'修改'" />客户
|
|