oa系统第三天

简单验证和复杂验证,

整合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>




你可能感兴趣的:(oa系统第三天)