简单验证和复杂验证,
整合ssh
context sessionFactory session 导入jar包 外部资源文件,添加国际化
用的是hibernate.cfg.xml mappingLocations映射 , configLocation
tx , 配置事务,
复杂验证是基于给后台传一个用户名,根据用户名查询employee的所有信息,判断用户名是否存在,用户名是否锁定,用户名的密码是否正确,
创建三个异常,实现runtimeexception,在国际化文件中添加异常,在页面中获取,<s:text name=""/> 这是国际化文件
详细步骤
1.整合struts 创建struts.xml文件,复制粘贴,在web.xml文件中配置ContextLoaderListener ,struts整合完成
2.整合hibernate,在spring.xml(这个是spring的配置文件)创建外部资源文件db.properties,此文件是连接数据库的基本信息,创建Spring spring.xml文件,利用context获取外部资源文件,并且配置dataSource连接数据库的c3p0,配置LocalSessionFactoryBean,hibernate.cfg.xml文件在这里配置 ,
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
<property name="mappingLocations" value="classpath:com/atguigu/oa/bean/*.hbm.xml"></property>
配置bean 事务,配置HibernateTransactionManager,最后配置txdriven文件.
3.整合完成,实现第一步验证,利用jq来进行第一步验证,如何获取用户输入的字符,var val=this.value,这样就获取了,然后去除两端的空格,并判断不为空进行下一步验证,最后一步验证是,不能包含特殊字符。
4.第二步验证是基于validata的,没什么用.用到了国际化
5.第三步验证是服务器端的复杂验证,首先先在struts.xml文件中配置国际化文件,<constant name="struts.custom.i18n.resources" value="i18n"></constant>,这个使用一般主题不好,配置简单主题<constant name="struts.ui.theme" value="simple"></constant>,这两个的name都是从strutsdefalut.xml文件中得到的.流程是 dao service action ,原理根据传过来的用户名查询employee对象,存在,不存在,以及锁定,然后给获取的employee放到session中,放到前台,
*****6.非常不熟练的,在前台不知道怎么获取后台传过来的对象,ognl一种方式,域对象, 还有jq没怎么用,也很不熟练
${sessionScope.employee }1.第一种方式,el表达式
${employee }2.第二种方式,ognl表达式
<%=session.getAttribute("employee") %>3.普通表达式,jsp的表达式
取的是session.put("employee",employee)中的对象,所以还是ognl表达式更好一些
7.使用了easyUI
8.
emplist2.jsp页面
ajax删除操作
1.实现的原理是,传入employeeid,然后返回employee对象,根据这个对象,在department中查,看是否是空,是空 就不是管理者,不是空 就是管理者 1 是管理者,2 不是管理者
2.ajax分页操作
3.普通分页操作
普通分页操作 是四个东西 1.pageNumber 当前页码数前台传的
2.pageSize 每一个显示的条数 自己定义
3.pageRecord 在数据库里查的 总记录数
4.totalPage 一共多少页 计算出来的
5.List<T> list 是哪种对象的集合,在前台显示的 根据size 在数据库里查的
9.
今天是input页面
上午是save操作
1.ajax的请求都是直接发到Action里面的方法,方法是void的,用parameterAware 的params 获取从ajax传过来的参数,调用dao验证,用到了技术easyUI,
使用 jQuery 的 validation 验证框架完成表单的前端验证., 使用 jQuery 的 weebox 插件来显示角色.
2.el表达式和ognl表达式 最直接的区别就是,ognl表达式是在struts2标签里用,而el表达式一般在普通html标签里用
3.设置二级缓存,一定要在bean里的hibernate.hbm.xml标签里设置上,否则不好使,
4.出了一个错误 ,叫什么save 之前没有把employee flush 这个错误,是因为链接查询太多,然后就关闭dao里面的left outer join ,打开web.xml里的 OpenSessionInViewFilter4
就好啦
下午是修改操作 ,跟save操作都在一个界面,注意 名称问题
今天下午老师用的 抛出异常的方法,来ajax检验传入的loginName,这个方法有毛病,如果是这样的话,那么首页不写用户名和密码的时候,会出现错误页面,于是我写了个重载方法,使其变为正常了
第四天
1.回显是struts的功能,而根据id查询employee,是hibernate的功能,这两个功能没有关联,出现的错误叫做联合主键异常从prepare方法里清空roles
2.model.setDepartment(new Department()); exception 是关联对象的主键不让改,跟持久化对象有关系,就是不让改,没办法identifier of an instance of
这个异常,原因是因为在一个界面提交,然后又回到这个页面,同样是page范围,再次提交,hibernate就认为是同一个对象提交两次,之前的主键被更新,然后就报错,在action里new的对象,也就是在事务之前
第五天
poi 文件的下载
1.把数据先转化成一张表,其实用户下载的是转化的那张表, 所以 先转化的这张表就是临时文件 这个访问的是action
2.自定义一个拦截器,将硬盘上的文件删除,用户下载完成后删除自己的文件
3.在struts.xml中配置拦截器使用
4.配置下载文件的四个属性
5.获取真实路径,ServletActionContext.getServletContext.getRealPath("绝对路径");
6.删除临时问价需要给传入到requset域中,然后在根据文件名删除
private String contentType;
private long contentLength;
private String fileName;
private InputStream inputStream;
从数据库中查询所有对象,然后往excel里写就,用到了 poi jar包,用的对象是Workbook
ssh的下载运行的流程是,点击开始下载,调用action,第一次走是 从前到后,然后 在返回对象, 从后往前走,分模块写
文件的上传的框架
1.点击上传的时候,访问action,如果不符合条件,那么返回input ,直接返回文件上传页面,input页面,把信息放入到国际化资源文件中,两个验证,一个是文件是否是xls文件,另一个是验证行数有没有错误, 验证xls文件类型 <s:fielderror fieldName="file"></s:fielderror> jsp 中的 验证文件param name="fileUpload.allowedExtensions">xls,.xlsx</param> 是struts中配置的 ,在国际化资源文件中有三个错误消息, 大小,类型,上传出错
另一个是动态的{0}{1},也是在国际化文件中配置的,
这两个都是通过action里面的方法 加入到 error里面的 getText()是国际化的, addActionError () 都是添加错误消息的
struts 出错自动找input界面
2.出现错误都是转会到当前页面,并且在当前页面添加错误信息,错误信息就是 getText 动态的信息
if(errors!=null && errors.size()>0){
StringBuilder errormessage = new StringBuilder();
for(String[] error:errors){
//gettest是国际化的
String message=getText("error.employee.upload",error);
//在前台显示出来
errormessage.append(message);
}
//我说的没有信息呢
addActionError(errormessage.toString());
return "input";
}
这个是动态的信息 ,
这样写的, 而另一个错误信息,是struts配置一下,自动验证的 ,
如果想转回原来的界面 那就在写一个action,错误的时候return "input";就好了
<action name="emp_upload">
<result>/WEB-INF/pages/emps/upload.jsp</result>
</action>
<action name="emp-upload" class="employeeAction"
method="upload">
<result name="input">/WEB-INF/pages/emps/upload.jsp</result>
</action>