用户注册:
将鼠标放上去,显示小手模样
解决用户注册失败,在regist页面抛出异常
解决用户登录失败,在login页面抛出异常
方法一:自定义异常,然后配置对应的页面显示错误即可。(不适应,原因是如果页面有多个异常,那么就要写多个自定义异常)
方法二:将将异常信息捕捉,然后跳转到页面显示即可
public String regist(){
//1 调用Service保存注册用户
try {
userService.register(user);
} catch (Exception e) {
e.printStackTrace();
ActionContext.getContext().put("error", e.getMessage());
return "regist";
}
//2 重定向到登陆页面
return "toLogin";
}
public void register(User user) {
//1调用Dao根据注册的登陆名获得用户对象
User existU=userDao.getUserByUsercode(user.getUser_code());
if(existU !=null){
//2 如果获得到user对象,用户名已经存在,抛出异常
throw new RuntimeException("用户名已存在!!");
}
userDao.save(user);
}
public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao {
public User getUserByUsercode(final String usercode) {
//HQL 由于是匿名内部类因此参数变成final类型
/*return getHibernateTemplate().execute(new HibernateCallback<User>() {
@Override
public User doInHibernate(Session session) throws HibernateException {
String hql="from User where user_code=?";
Query query = session.createQuery(hql);
query.setParameter(0,usercode);
User user=(User) query.uniqueResult();
return user;
}
});*/
DetachedCriteria dc=DetachedCriteria.forClass(User.class);
dc.add(Restrictions.eq("user_code", usercode));
List<User> list = (List<User>) getHibernateTemplate().findByCriteria(dc);
if(list !=null && list.size()>0){
return list.get(0);
}else{
return null;
}
}
}
登陆校验:
public class PrivilegeInterceptor extends MethodFilterInterceptor {
protected String doIntercept(ActionInvocation invocation) throws Exception {
User user = (User) ActionContext.getContext().getSession().get("user");
if(user !=null){
return invocation.invoke();
}
return "toHome";
}
}
用户拜访客户的增加修改查询:
一:首先配置实体类和映射文件
public class SaleVisit {
private String visit_id;
private String visit_interviewee;
private String visit_addr;
private String visit_detail;
private Date visit_time;
private Date visit_nexttime;
//表达所属客户对象 多对一
private Customer customer;
//表达所属用户对象 多对一
private User user;
}
<hibernate-mapping package="cn.itcast.domain" >
<class name="SaleVisit" table="sale_visit" >
<id name="visit_id" >
<generator class="uuid"></generator>
</id>
<property name="visit_interviewee" ></property>
<property name="visit_addr" ></property>
<property name="visit_detail" ></property>
<property name="visit_time" ></property>
<property name="visit_nexttime" ></property>
<!-- 多对一 -->
<many-to-one name="customer" column="visit_cust_id" class="Customer" ></many-to-one>
<!-- 多对一 -->
<many-to-one name="user" column="visit_user_id" class="User" ></many-to-one>
</class>
</hibernate-mapping>
//分别在用户和User的实体类和配置文件中添加关系,这里只写了一个
//表达客户与拜访记录的一对多
private Set<SaleVisit> saleVisits = new HashSet<SaleVisit>();
<!-- 一对多 -->
<set name="saleVisits">
<key column="visit_user_id" ></key>
<one-to-many class="SaleVisit" />
</set>
用户拜访客户记录-添加
日期控件(可惜这个日期控件的今天点击有问题,无法显示数据,以后尽量别用这个,或者以后有空自己写一个没有问题的)
这是个Demo
<HTML>
<!-- 日期插件,使用jquery -->
<script type="text/javascript" src="jquery/jquery-1.4.2.js"></script>
<link rel="stylesheet" href="jquery/jquery.datepick.css" type="text/css">
<script type="text/javascript" src="jquery/jquery.datepick.js"></script>
<script type="text/javascript" src="jquery/jquery.datepick-zh-CN.js"></script>
<script type="text/javascript">
$(document).ready(function(){
//使用class属性处理 'yy-mm-dd' 设置格式"yy/mm/dd"
$('#birthday').datepick({dateFormat: 'yy-mm-dd'});
});
</script>
<body>
<input type="text" id="birthday"/>
</body>
</HTML>
public class SaleVisitAction extends ActionSupport implements ModelDriven<SaleVisit>{
private SaleVisitService saleVisitService;
private SaleVisit saleVisit=new SaleVisit();
//添加客户拜访记录
public String save(){
//取出登陆用户,放入SaleVisit实体.表达关系
User u=(User) ActionContext.getContext().getSession().get("user");
saleVisit.setUser(u);
saleVisitService.save(saleVisit);
return "toList";
}
public SaleVisit getModel() {
return saleVisit;
}
public void setSaleVisitService(SaleVisitService saleVisitService) {
this.saleVisitService = saleVisitService;
}
}
public class SaleVisitServiceImpl implements SaleVisitService{
private SaleVisitDao saleVisitDao;
public void save(SaleVisit saleVisit) {
saleVisitDao.saveOrUpdate(saleVisit);
}
public void setSaleVisitDao(SaleVisitDao saleVisitDao) {
this.saleVisitDao = saleVisitDao;
}
}
添加的时候,控制台报错了,问题如下(虽然我解决了这个问题,但是不知道这个问题怎么出现的)
ERROR org.hibernate.internal.SessionImpl - HHH000346: Error during managed flush
[Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1]
解决方法一:
解决方法二:
用户拜访客户记录列表(和前面一样代码省略)
怎么将时间变成后面的那种,需要添加两个get方法
用户拜访客户记录(方法和前面一样省略) 注意这个时间回显用新增的那个get方法才可以正常回显
MD5加密:典型的不可逆的加密方式
package cn.itcast.utils;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Utils {
/**
* 使用md5的算法进行加密
*/
public static String md5(String plainText) {
byte[] secretBytes = null;
try {
secretBytes = MessageDigest.getInstance("md5").digest(
plainText.getBytes());
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("没有md5这个算法!");
}
String md5code = new BigInteger(1, secretBytes).toString(16);// 16进制数字
// 如果生成数字未满32位,需要前面补0
for (int i = 0; i < 32 - md5code.length(); i++) {
md5code = "0" + md5code;
}
return md5code;
}
public static void main(String[] args) {
System.out.println(md5("123"));
}
}
MD5加密主要是用在用户注册和登录的时候