蒋振飞的博客 - SSH整合CRM(第4天)客户模块   
正在加载蒋振飞的博客...
V3.0
蒋振飞的博客

SSH整合CRM(第4天)客户模块

发布时间: 2019年04月21日 发布人: 蒋振飞 热度: 212 ℃ 评论数: 0

一、准备工作

1.Customer.java

public class Customer {
 
    private Long cust_id;
    private String cust_name;
    //private String cust_source;
    //private String cust_industry;
    //private String cust_level;
    private String cust_phone;
    private String cust_mobile;
    private String cust_image;

    /**
     * 客户和字典表示多对一,所以在多的一方放置一方的对象
     */
    private BaseDict baseDictSource;
    private BaseDict baseDictIndustry;
    private BaseDict baseDictLevel;
    
    // 一个客户有多个联系人:客户中应该放有联系人的集合。
    private Set<LinkMan> linkMans = new HashSet<LinkMan>();
}

2.Customer.hbm.xml

<?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>
 
    <class name="com.jzfblog.crm.domain.Customer" table="cst_customer">
        <id name="cust_id" column="cust_id">
            <generator class="native"></generator>
        </id>

        <property name="cust_name" column="cust_name" />
        <!-- <property name="cust_source" column="cust_source" />
        <property name="cust_industry" column="cust_industry" />
        <property name="cust_level" column="cust_level" /> -->
        <property name="cust_phone" column="cust_phone" />
        <property name="cust_mobile" column="cust_mobile" />
        <property name="cust_image" column="cust_image" />

        <!-- 配置客户与字典的多对一映射 -->
        <many-to-one name="baseDictSource" class="com.jzfblog.crm.domain.BaseDict" column="cust_source" />
        <many-to-one name="baseDictIndustry" class="com.jzfblog.crm.domain.BaseDict" column="cust_industry" />
        <many-to-one name="baseDictLevel" class="com.jzfblog.crm.domain.BaseDict" column="cust_level" />
    
        <!-- 配置客户与联系人一对多映射 ,一的一方放弃外键维护,交给多方维护-->
        <set name="linkMans" cascade="delete" inverse="true">
            <key column="lkm_cust_id" />
            <one-to-many class="com.jzfblog.crm.domain.LinkMan" />
        </set>
    </class>
  
</hibernate-mapping>

3.Web层(表示层)

创建CustomerAction.java文件,继承ActionSupport并加入Customer的模型驱动和customerService属性注入

/**
 * 客户管理Action类
 * @author 蒋振飞
 *
 */
public class CustomerAction extends ActionSupport implements ModelDriven<Customer>{
 
    // 模型驱动
    private Customer customer = new Customer();
    
    public Customer getModel() {
        return customer;
    }
    
    // 属性注入
    private CustomerService customerService;
 
    public void setCustomerService(CustomerService customerService) {
        this.customerService = customerService;
    }
}

4.Service层(业务逻辑层)

创建好CustomerService接口和CustomerServiceImpl.java文件,加入customerDao属性注入。

@Transactional
public class CustomerServiceImpl implements CustomerService {
 
    private CustomerDao customerDao;
 
    public void setCustomerDao(CustomerDao customerDao) {
        this.customerDao = customerDao;
    }
}

5.Dao层(数据访问层)

创建好CustomerDao接口和CustomerDaoImpl.java文件,继承HibernateDaoSupport。

6.applicationContext.xml

在applicationContext.xml文件中加入Action、Service、Dao的管理。

<bean id="customerAction" class="com.jzfblog.crm.web.action.CustomerAction" scope="prototype">
    <property name="customerService" ref="customerService" />
</bean>
<bean id="customerService" class="com.jzfblog.crm.service.impl.CustomerServiceImpl">
    <property name="customerDao" ref="customerDao" />
</bean>
<bean id="customerDao" class="com.jzfblog.crm.dao.impl.CustomerDaoImpl">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

二、客户保存功能

1.跳转保存界面

<a href="${ pageContext.request.contextPath }/customer_saveUI.action">- 新增客户</a>

2.struts.xml

添加customer_saveUI.action的路径。

<!-- 配置Action -->
<package name="crm" extends="struts-default" namespace="/">
 
    <!-- 配置客户管理的Action -->
    <action name="customer_*" class="customerAction" method="{1}">
        <result name="saveUI">/jsp/customer/add.jsp</result>
    </action>
</package>

3.CustomerAction.java

在创建好的CustomerAction类中,添加saveUI方法。

/**
 * 跳转保存客户页面
 */
public String saveUI(){
 
    return "saveUI";
}

4.确定保存地址

<form id=form1 name=form1 action="${ 
pageContext.request.contextPath }/customer_save.action" 
method="post">
 
</form>

5.struts.xml

添加customer_save.action的路径,代码中保存成功后重定向跳转的findAll方法在客户查询中再做记录。

<!-- 配置Action -->
<package name="crm" extends="struts-default" namespace="/">

    <!-- 配置客户管理的Action -->
    <action name="customer_*" class="customerAction" method="{1}">
        <result name="saveUI">/jsp/customer/add.jsp</result>
        <result name="success" type="redirectAction">customer_findAll.action</result>
    </action>
    
</package>

6.CustomerAction.java

在创建好的CustomerAction类中,添加save方法。

/**
 * 保存客户
 */
public String save(){

    customerService.save(customer);
    return SUCCESS;
}

7.CustomerServiceImpl.java

在CustomerServiceImpl类中,添加save方法。

/**
 * 业务层保存用户
 */
public void save(Customer customer) {
    customerDao.save(customer);
}

8.CustomerDaoImpl.java

在CustomerDaoImpl类中,添加save方法。

/**
 * 持久层保存用户
 */
public void save(Customer customer){
    this.getHibernateTemplate().save(customer);
}

三、客户资质上传功能

1.增加文件上传input框

<input type="file" name="upload" />

2.在form表单中,新增enctype属性

<form action="${pageContext.request.contextPath }/customer_save.action" method=post enctype="multipart/form-data">
</form>

3.CustomerAction.java

新增三个属性值,并设置set方法。

private String uploadFileName; // 上传的文件名称,而且注意"upload"必须与表单中的name一致
private String uploadContentType; // 上传的文件类型
private File upload; // 上传的文件

4.UploadUtils.java

添加getUuidFileName和getPath方法。

/**
 * 解决文件名重复问题
 * @param fileName
 * @return
 */
public static String getUuidFileName(String fileName) {
    // 找出符号"."的位置
    int idx = fileName.indexOf("."); // aa.txt
    // 获取后缀
    String lastName = fileName.substring(idx); //.txt
    // 返回随机生成的uuid+后缀
    return UUID.randomUUID().toString().replace("-", "") + lastName;
}
 
/**
 * 使用目录分离的方法
 * @return
 */
public static String getPath(String uuidFileName) {
    // 获取文件名的哈希值
    int hashCode1 = uuidFileName.hashCode();
    int hashCode2 = hashCode1 >>> 4;
    // 作为一级目录
    int d1 = hashCode1 & 0xf;
    // 作为二级目录
    int d2 = hashCode2 & 0xf;
    return "/" + d1 + "/" + d2;
}

5.CustomerAction.java

修改CustomerAction中的save方法。

/**
 * 保存客户
 * @throws IOException 
 */
public String save() throws IOException{
    // 上传图片
    if(upload != null) {
        // 设置文件上传路径
        String path = "D:/upload";
        // 为了避免上传文件名相同,所以采用随机文件名
        String uuidFileName = UploadUtils.getUuidFileName(uploadFileName);
        // 一个目录存放文件过多,目录分离
        String realPath = UploadUtils.getPath(uuidFileName);
        // 创建目录
        String dir = path + realPath;
        File file = new File(dir);
        if(!file.exists()) {
            file.mkdirs();
        }
    
        // 文件上传
        File destFile = new File(dir+"/"+uuidFileName);
        FileUtils.copyFile(upload, destFile);
        // 设置cust_image属性值
        customer.setCust_image(dir+"/"+uuidFileName);
    }
    // 保存客户
    customerService.save(customer);
    return SUCCESS; 
}

6.struts.xml

对上传的文件进行限定,在struts.xml增加拦截器。

<!-- 5M的上传容量 -->
<constant name="struts.multipart.maxSize" value="5242880" />
<!-- 在action中增加如下内容,而且必须配置input视图 -->
<result name="input">/jsp/customer/add.jsp</result>
<interceptor-ref name="defaultStack">
    <param name="fileUpload.maximumSize">2097152</param>
    <param name="fileUpload.allowedExtensions">.jpg</param>
</interceptor-ref>

7.在前端页面添加错误回显

<s:actionerror/>
<s:fielderror />

四、删除用户

1.删除选择框

<a href="javascript:void(0)" onclick="doDelete(<s:property value="cust_id"/>)">删除</a>

function doDelete(cust_id) {
    var flag = confirm("是否确定删除");
    if(flag){
        window.location.href = "${pageContext.request.contextPath }/customer_delete.action?cust_id=" + cust_id;
    }
}

2.CustomerAction.java

在创建好的CustomerAction中,添加delete方法。

/**
 * 删除客户
 */
public String delete() {
    customer = customerService.findById(customer);
    String cust_image = customer.getCust_image();
    if(cust_image != null && !"".equals(cust_image)) {
        File file = new File(cust_image);
        if(file.exists()) {
            file.delete();
        }
    }
    customerService.delete(customer);
    return SUCCESS;
}

3.CustomerServiceImpl.java

在CustomerServiceImpl类中,添加findById和delete方法。

/**
 * 通过cust_id查找customer
 */
public Customer findById(Customer customer) {

    return customerDao.findById(customer);
}
 
/**
 * 业务层删除客户
 */
public void delete(Customer customer) {
 
    customerDao.delete(customer);
}

4.CustomerDaoImpl.java

在CustomerDaoImpl类中,添加findById和delete方法。

/**
 * 通过cust_id查找customer
 */
public Customer findById(Customer customer) {
    return this.getHibernateTemplate().get(Customer.class, customer.getCust_id());
}
 
/**
 * 持久层删除客户
 */
public void delete(Customer customer) {
 
    this.getHibernateTemplate().delete(customer);
}

五、修改用户

1.确定数据回显地址

<a href="${pageContext.request.contextPath }/customer_edit.action?cust_id=<s:property value="cust_id"/>">修改</a>

2.struts.xml

在struts.xml中添加customer_edit.action的路径。

<result name="edit">/<u>jsp</u>/customer/edit.jsp</result>

3.CustomerAction.java

在创建好的CustomerAction中,添加edit方法。

/**
 * 修改用户回显
 */
public String edit() {

    // 根据id查询,跳转页面,回显数据
    customer = customerService.findById(customer);
    // 将customer传递到页面:两种方式
    // 一:手动压栈,<s:property value="cust_name" />,<s:propetry name="cust_name" value="" />
    // 二:模型驱动对象,默认在栈里,<s:propetry value="model.cust_name" />
    ActionContext.getContext().getValueStack().push(customer);
    return "edit";
}

 4.将普通字段回显

<s:form id="form1" name="form1" action="customer_update" 
namespace="/" method="post" enctype="multipart/form-data" 
theme="simple">
    <s:hidden name="cust_id" value="%{model.cust_id}" />
    <s:hidden name="cust_image" value="%{model.cust_image}" />
    <s:textfield cssClass="testbox" id="Channel2" cssStyle="WIDTH: 180px" maxLength="50" name="cust_name" />
    <s:textfield cssClass="testbox" id="Channel2" cssStyle="WIDTH: 180px" maxLength="50" name="cust_phone" />
    <s:textfield cssClass="testbox" id="Channel2" cssStyle="WIDTH: 180px" maxLength="50" name="cust_mobile" value="%{model.cust_mobile}" />
 
</s:form>

5.将数据字典回显,采用异步的方式

<select id="cust_level" name="baseDictLevel.dict_id">
    <option value="">--请选择--</option>
</select>
<select id="cust_source" name="baseDictSource.dict_id">
    <option value="">--请选择--</option>
</select>
<select id="cust_industry" name="baseDictIndustry.dict_id">
    <option value="">--请选择--</option>
</select>

$(function(){
    // 页面加载函数就会执行:
    // 页面加载,异步查询字典数据:
    // 加载客户来源
    $.post("${pageContext.request.contextPath }/baseDict_findByTypeCode.action",{"dict_type_code":"002"},function(data){
        // 遍历json的数据:
        $(data).each(function(i,n){
            $("#cust_source").append("<option value='"+n.dict_id+"'>"+n.dict_item_name+"</option>");
        });
        // js中不能使用UI标签,只能使用EL
        $("#cust_source option[value='${model.baseDictSource.dict_id}']").prop("selected", 'true');
    },"json");
    
    $.post("${pageContext.request.contextPath }/baseDict_findByTypeCode.action",{"dict_type_code":"006"},function(data){
        // 遍历json的数据:
        $(data).each(function(i,n){
            $("#cust_level").append("<option value='"+n.dict_id+"'>"+n.dict_item_name+"</option>");
        });
        $("#cust_level option[value='${model.baseDictLevel.dict_id}']").prop("selected", 'true');
    },"json");
    
    $.post("${pageContext.request.contextPath }/baseDict_findByTypeCode.action",{"dict_type_code":"001"},function(data){
        // 遍历json的数据:
        $(data).each(function(i,n){
            $("#cust_industry").append("<option value='"+n.dict_id+"'>"+n.dict_item_name+"</option>");
        });
        $("#cust_industry option[value='${model.baseDictIndustry.dict_id}']").prop("selected", 'true');
    },"json");
});

6.确定更新地址

customer_update

7.CustomerAction.java

在创建好的CustomerAction类中,添加update方法。

/**
 * 修改用户
 * @throws IOException 
 */
public String update() throws IOException {
    String cust_image = customer.getCust_image();
    // 文件项是否已经选择,如果选择了就删除原有文件,没选就使用原有文件
    if(upload != null && !"".equals(cust_image)) {
        File oldFile = new File(cust_image);
        if(oldFile.exists()) {
            oldFile.delete();
        }
        // 设置文件上传路径
        String path = "D:/upload";
        // 为了避免上传文件名相同,所以采用随机文件名
        String uuidFileName = UploadUtils.getUuidFileName(uploadFileName);
        // 一个目录存放文件过多,目录分离
        String realPath = UploadUtils.getPath(uuidFileName);
        // 创建目录
        String dir = path + realPath;
        File file = new File(dir);
        if(!file.exists()) {
            file.mkdirs();
        }
        // 文件上传
        File destFile = new File(dir+"/"+uuidFileName);
        FileUtils.copyFile(upload, destFile);
        // 设置cust_image属性值
        customer.setCust_image(dir+"/"+uuidFileName);
    }
    customerService.update(customer);
    return SUCCESS;
}

8.CustomerServiceImpl.java

在CustomerServiceImpl类中,添加update方法。

/**
 * 修改用户
 */
public void update(Customer customer) {
 
    customerDao.update(customer);
}

9.CustomerDaoImpl.java

在CustomerDaoImpl类中,添加update方法。

/**
 * 修改用户
 */
public void update(Customer customer) {
 
    this.getHibernateTemplate().update(customer);
}

六、查询所有客户

1.确定查询地址

<a href="${ pageContext.request.contextPath }/customer_findAll.action" target=main>- 客户列表</a>

2.struts.xml

在struts.xml中添加customer_findAll.action的路径。

<!-- 配置Action -->
<package name="crm" extends="struts-default" namespace="/">
    <!-- 配置客户管理的Action -->
    <action name="customer_*" class="customerAction" method="{1}">
        <result name="saveUI">/jsp/customer/add.jsp</result>
        <result name="findAll">/jsp/customer/list.jsp</result>
        <result name="success" type="redirectAction">customer_findAll.action</result>
    </action>
</package>

3.pageBean.java

作为分页参数的设置。

/**
 * 存放分页相关的数据
 *
 */
public class PageBean {
    //基本属性
    private int currentPageNum;//当前页数,由用户指定 *
    private int pageSize = 5 ;//每页显示的条数,固定的 *
    private int totalRecords;//总记录条数,数据库查出来的     *
    private int totalPageNum;//总页数,计算出来的 *
    private int startIndex;//每页开始记录的索引,计算出来的     *
    private int prePageNum;//上一页     *
    private int nextPageNum;//下一页     *
    private List records;//已经分好页的结果集,该list中只有10条记录
    
    //扩展属性
    //一共每页显示9个页码按钮
    private int startPage;//开始页码
    private int endPage;//结束页码
    //完善属性
    private String url;
    //要想使用我的分页,必须给我两个参数。一个是要看哪一页,另一个是总记录条数
    public PageBean(int currentPageNum,int totalRecords,int pageSize){
        this.currentPageNum = currentPageNum;
        this.totalRecords = totalRecords;
        this.pageSize=pageSize;
        //计算查询记录的开始索引
        startIndex = (currentPageNum-1)*pageSize;
        //计算总页数
        totalPageNum = totalRecords%pageSize==0?(totalRecords/pageSize):(totalRecords/pageSize+1);
 
        startPage = currentPageNum - 4; //5
        endPage = currentPageNum + 4;  //13
        //看看总页数够不够9页
        if(totalPageNum>9){
            //超过了9页
            if(startPage < 1){
                startPage = 1;
                endPage = startPage+8;
            }
            if(endPage>totalPageNum){
                endPage = totalPageNum;
                startPage = endPage-8;
            }
        }else{
            //不够9页
            startPage = 1;
            endPage = totalPageNum;
        }
    }

    public int getPrePageNum() {
        prePageNum = currentPageNum-1;
        if(prePageNum<1){
            prePageNum = 1;
        }
        return prePageNum;
    }
 
    public int getNextPageNum() {
        nextPageNum = currentPageNum+1;
        if(nextPageNum>totalPageNum){
            nextPageNum = totalPageNum;
        }
        return nextPageNum;
    }

}

4.CustomerAction.java

在创建好的CustomerAction类中,添加findAll方法,还需使用属性驱动的方法获取页面传递的currentPageNum和pageSize参数。

// 属性驱动接收当前页
private Integer currentPageNum = 1;
 
public void setCurrentPageNum(Integer currentPageNum) {
    if(currentPageNum == null) {
        currentPageNum = 1;
    }
    this.currentPageNum = currentPageNum;
}
 
// 属性驱动接收每页最大记录数
private Integer pageSize = 3;
 
public void setPageSize(Integer pageSize) {
    if(pageSize == null) {
        pageSize = 5;
    }
    this.pageSize = pageSize;
}
 
/**
 * 客户查询
 */
public String findAll() {
    // 接收分页参数
    // 最好使用DetachedCriterial对象(条件查询)
    DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Customer.class);
    // 调用业务层查询
    PageBean pageBean = customerService.findByPage(detachedCriteria, currentPageNum, pageSize);
    // 将pageBean放入值栈中
    ActionContext.getContext().getValueStack().push(pageBean);
    return "findAll";
}

5.CustomerServiceImpl.java

在CustomerServiceImpl类中,添加findByPage方法。

/**
 * 业务层分页查询用户
 */
public PageBean findByPage(DetachedCriteria detachedCriteria, Integer currentPageNum, Integer pageSize) {

    //查询总记录数
    int totalRecords = customerDao.findTotalRecords(detachedCriteria);
    // 创建pageBean的对象
    PageBean pageBean = new PageBean(currentPageNum, totalRecords, pageSize);
    // 查询当前页的记录
    List<Customer> records = customerDao.findCustomerByPage(detachedCriteria, pageBean.getStartIndex(), pageBean.getPageSize());
    pageBean.setRecords(records);
    pageBean.setUrl("");
    return pageBean;
}

6.CustomerDaoImpl.java

在CustomerDaoImpl类中,添加findTotalRecords方法和findCustomerByPage方法。

/**
 * 查询总记录数
 */
public Integer findTotalRecords(DetachedCriteria detachedCriteria) {
    detachedCriteria.setProjection(Projections.rowCount());
    List<Long> list = (List<Long>) this.getHibernateTemplate().findByCriteria(detachedCriteria);
    if(list.size() > 0) {
        return list.get(0).intValue();
    }
    return null;
}
 
/**
 * 分页查询客户记录
 */
public List<Customer> findCustomerByPage(DetachedCriteria detachedCriteria, int startIndex, int pageSize) {
    // 清空一下查询条件
    detachedCriteria.setProjection(null);
    return (List<Customer>) this.getHibernateTemplate().findByCriteria(detachedCriteria, startIndex, pageSize);
}

7.前端页面

<%@ taglib uri="/struts-tags" prefix="s"%>
<s:iterator value="records">
<TR
style="FONT-WEIGHT: normal; FONT-STYLE: normal; BACKGROUND-COLOR: white; TEXT-DECORATION: none">
<TD><s:property value="cust_name"/></TD>
<TD><s:property value="baseDictLevel.dict_item_name"/></TD>
<TD><s:property value="baseDictSource.dict_item_name"/></TD>
<TD><s:property value="baseDictIndustry.dict_item_name"/></TD>
<TD><s:property value="cust_phone"/></TD>
<TD><s:property value="cust_mobile"/></TD>
<TD>
<a href="${pageContext.request.contextPath }/">修改</a>
&nbsp;&nbsp;
<a href="${pageContext.request.contextPath }/">删除</a>
</TD>
</TR>
</s:iterator>
共[<B><s:property value="totalRecords" /></B>]条记录,[<B><s:property value="totalPageNum" /></B>]页
每页显示
    <select name="pageSize" onchange="to_page()">
        <option value="3" <s:if test="pageSize == 3">selected</s:if>>3<aption>
        <option value="5" <s:if test="pageSize == 5">selected</s:if>>5</option>
        <option value="10" <s:if test="pageSize == 10">selected</s:if>>10</option>
    </select>
条
<s:if test="currentPageNum != 1">
    [<A href="javascript:to_page(<s:property value="1" />)">首页</A>]
    [<A href="javascript:to_page(<s:property value="prePageNum" />)">前一页</A>]
</s:if>
<s:if test="currentPageNum != totalPageNum">
    [<A href="javascript:to_page(<s:property value="nextPageNum" />)">后一页</A>] 
    [<A href="javascript:to_page(<s:property value="totalPageNum" />)">尾页</A>] 
</s:if>
<s:iterator var="i" begin="1" end="totalPageNum">
    <s:if test="currentPageNum == #i">
        <s:property value="#i" />
    </s:if>
    <s:else>
        <A href="javascript:to_page(<s:property value="#i" />)"><s:property value="#i" /></A>
    </s:else>
</s:iterator>

8.重点

需要在web.xml中配置OpenSessionInViewFilter过滤器,否则关联的外键查询没有结果,因为hibernate默认是懒加载。


<!-- 此处针对baseDictSource.dict_item_name等无法显示 -->
<filter>
    <filter-name>OpenSessionInViewFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
</filter>
  
<filter-mapping>
    <filter-name>OpenSessionInViewFilter</filter-name>
    <url-pattern>*.action</url-pattern>
</filter-mapping>

七、条件查询客户

1.页面增加筛选字段

客户名称:
<s:textfield theme="simple" cssClass="textbox" 
id="sChannel2" cssStyle="width:80px" maxlength="50" name="cust_name" />

客户来源:
<select id="cust_source" name="baseDictSource.dict_id">
    <option value="">-请选择-</option>
</select>

客户级别:
<select id="cust_level" name="baseDictLevel.dict_id">
    <option value="">-请选择-</option>
</select>

客户所属行业:
<select id="cust_industry" name="baseDictIndustry.dict_id">
    <option value="">-请选择-</option>
</select>
<input class="button" id="sButton2" type="submit" value="筛选" name=sButton2>

2.CustomerAction.java

重写findAll方法。

public String findAll() {
    // 接收参数:分页参数
    // 最好使用DetachedCriteria对象(条件查询--带分页)
    DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Customer.class);
    // 设置条件:(在web层设置条件)
    if (customer.getCust_name() != null) {
        // 输入名称:
        detachedCriteria.add(Restrictions.like("cust_name", "%" + customer.getCust_name() + "%"));
    }
    if (customer.getBaseDictSource() != null) {
        if (customer.getBaseDictSource().getDict_id() != null && !"".equals(customer.getBaseDictSource().getDict_id())) {
            detachedCriteria.add(Restrictions.eq("baseDictSource.dict_id", customer.getBaseDictSource().getDict_id()));
        }

    }
    if (customer.getBaseDictLevel() != null) {
        if (customer.getBaseDictLevel().getDict_id() != null && !"".equals(customer.getBaseDictLevel().getDict_id())) {
            detachedCriteria.add(Restrictions.eq("baseDictLevel.dict_id", customer.getBaseDictLevel().getDict_id()));
        }
    }
    if (customer.getBaseDictIndustry() != null && customer.getBaseDictIndustry().getDict_id() != null) {
        if (customer.getBaseDictIndustry().getDict_id() != null && !"".equals(customer.getBaseDictIndustry().getDict_id())) {
            detachedCriteria.add(Restrictions.eq("baseDictIndustry.dict_id", customer.getBaseDictIndustry().getDict_id()));
        }
    }
    // 调用业务层查询:
    PageBean<Customer> pageBean = customerService.findByPage(detachedCriteria, currPage, pageSize);
    ActionContext.getContext().getValueStack().push(pageBean);
    return "findAll";
}

打赏 蒋振飞

取消

感谢您的支持,我会继续努力的!

扫码支持
一分也是爱     一块不嫌多

点击 支付宝 或 微信 打赏蒋振飞

打开支付宝扫一扫,即可进行扫码打赏哦

评论列表