您的位置:首页 > 编程语言 > Java开发

struts2考勤系统备忘录

2016-09-18 09:30 309 查看

描述:对于现有纯JSP系统,修改为SSH框架,本周主要 内容是修改基于Struts2的视图层改造,下边是在改造过程中遇到的一些问题,和对出现问题的猜想,和验证猜想从而解决问题的过程,,代码就不上了,因为很多问题都是由多个代码文件的不同位置造成的

关键字:JSP Struts2

原生 JSP ,转换struts2框架存在的问题

进度一:管理员对用户模块的增删改查

问题一:装饰器中对于action无法装饰的问题

siteMeshFilter

/jsp/*

FORWARD

REQUEST

问题二:

关于验证码问题,在Struts2框架下,无法在用Serclet 构建映射路径

,类似于 /yzm ,框架会当作yzm.action 去配置文件寻找action 找不到

会爆出页面问题

所以在strust2框架下,验证码也要用action 来获取,result 类型stream

问题三:

有关原页面当中存在的超链接(原来用于跳转页面的链接,都要使用action)

问题四:

在装饰器装饰页面范围内,点击触发事件无法运行JS函数

这个问题比较坑爹,因为装饰器用的模板页构成了一个模板,根据模板标签的位置

将被装饰页面的 “各部分内容” 按标签位置插入到模板页,对!被修饰页面,被修饰内容以外

是不会插入的, 如果你的 写到了被修饰内容标签以外,,是不会被插入,,,,

所以要将js 写在模板页,或者被修饰页可以被导入的标签内

建议,如果采用将JS 在模板页写入,那么每个页面都会加载这部分JS,因为JS 函数应该

按不同功能放在不同页面,所以应该将页面 这些被导入的标签内

问题五:

对于一个模板的增加,删除,修改,查找,一般封装在一个模块ACTION

不同的功能用不同的方法实现,不同的方法接受的参数不一样,在校验的过程中

校验参数,就需要不同的校验器,目前掌握三种方法,用代码实现,但是一般

用声明校验器来做,有对所有方法校验,不需要校验的方法,用注解跳过,

还有就是针对不同action,配置不同文件 文件名-动作名-validation,这里用最后一种

问题六:

一个功能,从跳转到该页面到,实现该页面功能,需要配置两个动作

//因为构建,修改用户信息页面,根据ID 从数据库提取一些信息,

//不需要提取信息的,直接调用EXECUTE方法就可以,就是一个用ACTION

//隐藏页面URL的,但是涉及到用提取信息,就不用公用的EXCUTE方法了

//那样会造成数据越界,所以要声明一个方法来返回信息

问题七:

,每个页面中这个标签用来,返回执行结果

修改用户信息功能基本完成,异步检测没做,而且异步转换拼音还用的JS 实现的异步,

后期希望用JQUERY改造,权限判断语句没做,修改过程没有问题

问题八:

异步请求,返回页面信息,装饰器配置 ,排除配置失效,总是返回带有装修模板的页面,

但是排除/index.jsp生效,猜想是异步请求页面,会绕过模板排除配置(后期测试得出错误定论),

地址栏直接输入地址加参数也无效,,,不加参数没有问题,,尝试POST传参数

,测试结果POST可以所以,装饰器,,过于死板,一旦使用GET 传参,URL会增加

参数部分这样就不是配置的URL 了,结果是仍然装饰,

但是按框架要求,一般这样包含动态代码的页面,应被ACTION 代替,

事实上,我将把ACTION放在装饰范围以外

问题九:

当使用ACTION进行异步检测用户名是否存在的时候,需要返回一个0或者1,但是ACTION

直接返回一个页面,解决方法,添加一个JSP 用来作为action的结果页面,用STRUTS2标签

获取ACTION 封装的值,将页面信息返回给异步请求结果,可以达到效果

但是以上违反设计原则,我采用去除弹窗的形式,用原jsp直接调用标签接受,改成非弹框

形式提示

下一步工作内容:

admin_adduser.jsp 修改JS去除弹窗的形式,用原jsp直接调用标签接受,改成非弹框形式提示

用原jsp直接调用标签接受,改成非弹框形式提示,因为要将表单提交到本身的ACTION ,用AJAX

就便的无意义,需要重载本页面才能获取,或者用ACTION获取的返回信息是更新后的本身页面,

还是采用另一种方法,采用中间JSP 转发,第二种方法是有效的

问题十:

问题描述:是否为管理员,是以布尔型变量存储的,Struts2框架中,校验器无法获取这个变量,

导致一直进行拦截,

问题猜想:struts2框架获取一个变量,那么在定义该变量的过程中,必须有GET SET 方法,该框架

是用GET 方法获取的,因为idea对于布尔型变量,默认是IS 方法而不是GET方法,所以导致该问题

解决方法:添加为每个变量都配置上SET GET 方法

猜想结果:错误,这种问题并不是因为没有GET方法导致校验器无法获取的,虽然以前出现过这种

但是现在struts2可以识别 isFlag(),所以不是GET方法问题

问题猜想2:校验器对变量校验设置为判断是否为空,这次猜想布尔型,应该采用其他的检验参数

查询结果:required 是否为空;requiredstring 必须字符;由于第一次使用的是requiredstring,

这个参数是用来判断String 类型的,无法用来判断布尔型变量,一旦采用将用返回为NULL,

而required是用来判断是否纯空,应该是任何类型,是真正意义上的空,当采用required,校验器

成功接收到布尔型参数,问题成功解决

解释:关于一个功能由两个ACTION 完成,一个用来隐藏URL ,给执行功能ACTION

传参数。起到分支控制器的作用,第一个ACTION 不需要校验器,因为自带判断功能

。,第二个ACTION配上校验使逻辑严谨

问题十一:

问题描述:删除用户模块,业务流程显示正常,发现实际无法删除数据,数据库中数据仍然存在

问题猜想:UserService 传参发生问题,

问题原因:因为想要用deleteuser_page.action 根据ID 将USER 传给deleteuser.action

而实际是两个action 之间还有一层admin_deleteuser.jsp ,所以导致USER最后放在了

jsp 而没有进行下一步传输到ACTION ,

解决方法:在deleteuser_page.action返回的admin_deleteuser.jsp 的表单上加入一个隐藏变量ID

将是否要删除的ID 传给,deleteuser.action,解决,

进度二:课程管理的增删改查

套用进度一模式,问题就比较少

课程列表的显示改造完成,添加课程模块完成,添加过程,检测课程名完成,

接下来改造模块,课程模块的修改,删除

收获:每解决一个问题,就对框架的理解又深入一部分,体会到学习还是要与实践相结合
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息