【CRM(二)】登入&客戶管理模組
CRM綜合練習:使用者模組登入功能
使用者模組:登入功能程式碼實現
修改登入頁面
<FORM id=form1 name=form1 action="${ pageContext.request.contextPath }/user_login.action" method=post target="_parent">
編寫Action中login方法
- UserAction.java
/**
* 使用者登入的方法:login
*/
public String login(){
//呼叫業務層查詢使用者:
User existUser = userService.login(user);
if(existUser == null){
//登入失敗
//新增錯誤資訊
this.addActionError("使用者名稱或密碼錯誤!");
return LOGIN;
}else{
//登陸成功
// ServletActionContext.getRequest().getSession().setAttribute("existUser", existUser);
ActionContext.getContext().getSession().put("existUser", existUser);
return SUCCESS;
}
}
編寫Service實現類
@Override
//業務層使用者登陸的方法
public User login(User user) {
user.setUser_password(MD5Utils.md5(user.getUser_password()));
//呼叫DAO
return userDao.login(user);
}
編寫DAO實現類
@Override
//DAO中根據使用者名稱和密碼進行查詢的方法:
public User login(User user) {
List<User> list = (List<User> ) this.getHibernateTemplate().find("from User where user_code=? and user_password = ?", user.getUser_code(),user.getUser_password());
if(list.size() > 0){
return list.get(0);
}
return null;
}
配置頁面的跳轉
struts.xml
<package name="crm" extends="struts-default" namespace="/">
<action name="user_*" class="userAction" method="{1}">
<result name="login">/login.jsp</result>
<result name="success" type="redirect">/index.jsp</result>
</action>
</package>
在頁面中顯示資料
- 在登入成功的頁面上顯示使用者的資訊
top.jsp
當前使用者:<s:property value="#session.existUser.user_name"/>
- 在失敗的頁面上顯示錯誤資訊
login.jsp
<%@ taglib uri="/struts-tags" prefix="s"%>
<s:actionerror/>
CRM綜合練習:客戶管理
客戶管理:準備工作
建立表
CREATE TABLE `cst_customer` (
`cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客戶編號(主鍵)',
`cust_name` varchar(32) NOT NULL COMMENT '客戶名稱(公司名稱)',
`cust_source` varchar(32) DEFAULT NULL COMMENT '客戶資訊來源',
`cust_industry` varchar(32) DEFAULT NULL COMMENT '客戶所屬行業',
`cust_level` varchar(32) DEFAULT NULL COMMENT '客戶級別',
`cust_phone` varchar(64) DEFAULT NULL COMMENT '固定電話',
`cust_mobile` varchar(16) DEFAULT NULL COMMENT '行動電話',
PRIMARY KEY (`cust_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
建立實體和對映
- 建立實體
- 建立對映
建立Action
建立Service
建立DAO
配置Action、Service、DAO
跳轉到新增頁面
修改左側選單頁面
編寫Action中的saveUI的方法
配置Action的跳轉
測試跳轉
引入資料字典
什麼是資料字典
資料字典用來規範某些地方具體值和資料
建立資料字典表
CREATE TABLE `base_dict` (
`dict_id` varchar(32) NOT NULL COMMENT '資料字典id(主鍵)',
`dict_type_code` varchar(10) NOT NULL COMMENT '資料字典類別程式碼',
`dict_type_name` varchar(64) NOT NULL COMMENT '資料字典類別名稱',
`dict_item_name` varchar(64) NOT NULL COMMENT '資料字典專案名稱',
`dict_item_code` varchar(10) DEFAULT NULL COMMENT '資料字典專案(可為空)',
`dict_sort` int(10) DEFAULT NULL COMMENT '排序欄位',
`dict_enable` char(1) NOT NULL COMMENT '1:使用 0:停用',
`dict_memo` varchar(64) DEFAULT NULL COMMENT '備註',
PRIMARY KEY (`dict_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `base_dict`(`dict_id`,`dict_type_code`,`dict_type_name`,`dict_item_name`,`dict_item_code`,`dict_sort`,`dict_enable`,`dict_memo`) values ('1','001','客戶行業','教育培訓 ',NULL,1,'1',NULL),('10','003','公司性質','民企',NULL,3,'1',NULL),('12','004','年營業額','1-10萬',NULL,1,'1',NULL),('13','004','年營業額','10-20萬',NULL,2,'1',NULL),('14','004','年營業額','20-50萬',NULL,3,'1',NULL),('15','004','年營業額','50-100萬',NULL,4,'1',NULL),('16','004','年營業額','100-500萬',NULL,5,'1',NULL),('17','004','年營業額','500-1000萬',NULL,6,'1',NULL),('18','005','客戶狀態','基礎客戶',NULL,1,'1',NULL),('19','005','客戶狀態','潛在客戶',NULL,2,'1',NULL),('2','001','客戶行業','電子商務',NULL,2,'1',NULL),('20','005','客戶狀態','成功客戶',NULL,3,'1',NULL),('21','005','客戶狀態','無效客戶',NULL,4,'1',NULL),('22','006','客戶級別','普通客戶',NULL,1,'1',NULL),('23','006','客戶級別','VIP客戶',NULL,2,'1',NULL),('24','007','商機狀態','意向客戶',NULL,1,'1',NULL),('25','007','商機狀態','初步溝通',NULL,2,'1',NULL),('26','007','商機狀態','深度溝通',NULL,3,'1',NULL),('27','007','商機狀態','簽訂合同',NULL,4,'1',NULL),('3','001','客戶行業','對外貿易',NULL,3,'1',NULL),('30','008','商機型別','新業務',NULL,1,'1',NULL),('31','008','商機型別','現有業務',NULL,2,'1',NULL),('32','009','商機來源','電話營銷',NULL,1,'1',NULL),('33','009','商機來源','網路營銷',NULL,2,'1',NULL),('34','009','商機來源','推廣活動',NULL,3,'1',NULL),('4','001','客戶行業','酒店旅遊',NULL,4,'1',NULL),('5','001','客戶行業','房地產',NULL,5,'1',NULL),('6','002','客戶資訊來源','電話營銷',NULL,1,'1',NULL),('7','002','客戶資訊來源','網路營銷',NULL,2,'1',NULL),('8','003','公司性質','合資',NULL,1,'1',NULL),('9','003','公司性質','國企',NULL,2,'1',NULL);
客戶表和字典表的關係分析
建立字典的實體和對映
- 建立實體
- 建立對映
修改字典和客戶的關係對映
- 修改了客戶的實體
- 修改客戶的對映
將對映檔案交給Spring
在新增頁面上非同步載入字典資料
建立字典的Action、Service、DAO
- 編寫DAO
- 編寫Service
- 編寫Action
將字典類交給Spring
引入jquery的js(在新增頁面上)
編寫非同步載入的方法
<script type="text/javascript">
$(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>");
});
},"json");
});
</script>
編寫Action
- 引jar包
package com.lele.crm.web.action;
import java.io.IOException;
import java.util.List;
import org.apache.struts2.ServletActionContext;
import com.lele.crm.domain.BaseDict;
import com.lele.crm.service.BaseDictService;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import net.sf.json.JSONArray;
import net.sf.json.JsonConfig;
/**
* 字典的Action的類
* @author lele
*
*/
public class BaseDictAction extends ActionSupport implements ModelDriven<BaseDict> {
//模型驅動使用的物件
private BaseDict baseDict = new BaseDict();
@Override
public BaseDict getModel() {
return baseDict;
}
//注入Service
private BaseDictService baseDictService;
public void setBaseDictService(BaseDictService baseDictService) {
this.baseDictService = baseDictService;
}
/**
* 根據型別名稱查詢字典的方法:findByTypeCode
* @throws IOException
*/
public String findByTypeCode() throws IOException{
System.out.println("BaseDictAction中的findByTypeCode方法執行了...");
//呼叫業務層查詢:
List<BaseDict> list = baseDictService.findByTypeCode(baseDict.getDict_type_code());
//將list轉成JSON。----jsonlib fastjson
/**
* JSONConfig:轉JSON的配置物件
* JSONArray :將陣列和list集合轉成JSON
* JSONObject:將陣列和Map集合轉成JSON
*/
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setExcludes(new String[]{"dict_sort","dict_enable","dict_memo"});
JSONArray jsonArray = JSONArray.fromObject(list,jsonConfig);
System.out.println(jsonArray.toString());
//將JSON列印到頁面
ServletActionContext.getResponse().setContentType("text/html;charset=UTF-8");
ServletActionContext.getResponse().getWriter().println(jsonArray.toString());
return NONE;
}
}
編寫Service
public class BaseDictServiceImpl implements BaseDictService {
//注入DAO
private BaseDictDao baseDictDao;
public void setBaseDictDao(BaseDictDao baseDictDao) {
this.baseDictDao = baseDictDao;
}
相關推薦
【CRM(二)】登入&客戶管理模組
CRM綜合練習:使用者模組登入功能
使用者模組:登入功能程式碼實現
修改登入頁面
<FORM id=form1 name=form1 action="${ pageContext.request.contextPath }/user_login.action" meth
【Struts2(二)】Struts2的封裝方法&其他介紹&注入方式詳解
1.2 相關知識點
1.2.1 Struts2的Servlet的API的訪問
在Struts2中,Action並沒有直接和Servlet API進行耦合,也就是說在Struts2的Action中不能直接訪問Servlet API。雖然Struts2中的Action訪問Servl
【Spring4(二)】IOC註解&AOP
Spring 的IOC 的註解開發(*****)
Spring的IOC的註解開發的入門
建立web專案,引入jar包
在Spring4的版本中,除了引入基本的開發包以外,還需要引入aop的包。
引入Spring的配置檔案
在src下建立一個Ap
【Hibernate(二)】持久化類、主鍵生成策略和一級快取
1.2 持久化類的編寫規則
1.2.1 持久化類的概述
什麼是持久化類
持久化:將記憶體中的一個物件持久化到資料庫中過程。Hibernate框架就是用來進行持久化的框架。
持久化類:一個Java物件與資料庫的表建立了對映關係,那麼這個類在Hibernate中稱為是持久化類。
【Struts2(四)】控制器&其他OGNL標籤&攔截器
1.2 Struts2的攔截器
1.2.1 攔截器概述
1.2.1.1 什麼是攔截器
Interceptor:攔截器,起到攔截Action的作用。
Filter:過濾器,過濾從客戶端向伺服器傳送的請
【CRM(四)】聯絡人管理
CRM綜合練習_聯絡人管理
儲存聯絡人
修改menu.jsp的連結
編寫Action中的saveUI的方法
編寫Service
編寫DAO
修改新增頁面(改成struts2的標籤)
編寫表單提交路徑
編寫Action的save
【Spring4(三)】Spring的事務管理和JDBC模板的使用
Spring 的 AOP 的基於 AspectJ 註解開發
Spring 的基於AspectJ 的註解的 AOP 開發
建立專案,引入 jar 包
引入配置檔案
applicationContext.
【C語言天天練(二)】statickeyword
修飾 weight () main函數 class code keyword spa tail
引言:
statickeyword不僅能夠修飾變量。並且能夠修飾函數。了解它的使用方法,不僅對閱讀別人的代碼有幫助,也有助於自己寫出更加健壯的
【Android開發—智慧家居系列】(二):用手機對WIFI模組進行配置
【Android開發—智慧家居系列】(二):用手機對WIFI模組進行配置
版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/u010924834/article/details/49496729
在實際開發中,我開
【Mac系統 + Python + Django】之開發一個釋出會系統【Django模型(二)】 【Mac系統 + Mysql】之安裝Mysql資料庫 【Python + Mysql】之用pymysql庫連線Mysql資料庫並進行增刪改查操作
上一部分給大家介紹Django的檢視。
接下來繼續來了解Django框架,來看第二部分,此部分是對資料庫的操作。
目錄:
一、設計系統表
二、admin後臺管理
三、基本資料訪問(SQLite資料庫)
四、Django配置MySQL
&
【C語言實現串列埠通訊知識點整理(二)】遇到的問題整理(待續....)
1.c編譯錯誤--error:stray \357 in program
UTF-8編碼問題。UTF-8編碼有BOM和無BOM格式。BOM,ByteOrderMark(位元組標記順序),表明使用UTF8來進行編碼。UTF-8的BOM通常為3個位元組EF BB BF。轉換成對應的字元檢視,就是‘\
【web框架】【 Cloud-Admin學習筆記(二)】【前後端分離的釋出配置】
因為spirng前後端分離設計,釋出流程略有不同,前後端單獨釋出,通過nginx整合
1、前端專案打包
#轉到前端專案根目錄
cd D:\001\myProject\GitHub\AG-Admin-v2-UI
# 構建生成環境
cnpm run build:prod
然後等待伺服
【Spring】(二)使用Spring進行事務管理的幾種方式
Spring既是SSH中的一員,也是SSM中的一員。不管是在SSH,還是在SSM中,Spring都起到了十分重要的“管理”作用,不論是對action的管理,還是對Controller的管理
【Servicemesh系列】【Envoy原始碼解析(二)】一個Http請求到響應的全鏈路(一)
目錄
1. http連線建立
當有新連線過來的時候,會呼叫上一章節所提及的被註冊到libevent裡面的回撥函式。我們回顧一下,上一章節提及了,會有多個worker註冊所有的listener,當有一個連線過來的時候,系統核心會排程一個執行緒出來交付
【Android Studio(二)】建立工程
Android Studio讓你可以很輕鬆的建立多種類別的安卓應用,比如Phone,table,TV,Wear,Google Glass等。在新建的專案嚮導中你可以根據你自己的需求建立你所需要的工程。
接下來講如何在Android Studio中建立一個工程。
Step1:
【spring mvc(二)】spring mvc使用屬性檔案配置c3p0和dbcp資料來源
spring mvc如果要用到資料庫,就要為專案配置資料來源,目前有兩個比較常見的資料來源:c3p0與dbcp。這兩個都是連線池技術,連線池的概念大概是,維護若干個資料庫的連線,程式需要使用的時候直接返回給它,這樣做的用意是降低資料庫連線,關閉的開銷,如果每次程式請求資料庫
【Java開發手冊之異常日誌(二)】日誌規約
【強制】應用中不可直接使用日誌系統 (Log 4 j 、 Logback) 中的 API ,而應依賴使用日誌框架SLF 4 J 中的 API ,使用門面模式的日誌框架,有利於維護和各個類的日誌處理方式統一。
import org.slf4j.Logg
.Net Core快取元件(MemoryCache)【快取篇(二)】
一、前言
.Net Core快取原始碼
1、上篇.NET Core ResponseCache【快取篇(一)】中我們提到了使用客戶端快取、和服務端快取。本文我們介紹MemoryCache快取元件,說到服務端快取我們一般都會想到MemoryCache、Redis等等優秀的快取元件,各自有各自使用的場景。
【jmeter(1)】jmeter的安裝和基本使用
多少 一個 將在 主界面 地址 ads 發送 收集 處理器 本篇文章主要介紹一下JMeter的安裝及基本使用方法。
1.安裝
JMeter的官方網址為http://jmeter.apache.org/
下載地址為http://jmeter.apache.org/downlo
Lync Server 2013 標準版部署(二)DNS記錄&權限
Lync Server 2013 Lync Server 標準版 Lync Server 2013 標準版數據庫安裝完成後;登錄AD服務器,在AD服務器中新建Lync 系統管理賬戶及添加Lync所需的DNS記錄。1.打開ADUC,創建Lync系統管理賬戶LyncAdmin2.設置密碼3.創建完成4.選