• 关于struts页面跳转的问题


    好几年之前的项目,最近闲着无聊又拿起来研究一下,先做一下项目介绍,项目采用传统的SSH框架,MySQL数据库,不同于Spring MVC,SpringMVC有一个modelAndView可以把页面url(view)和页面需要的数据(model)放到值栈中,struts使用ActionContext.getContext.put()方法把页面需要的数据(model)放在值栈中,通过struts.xml配置文件中的result找到对应的页面,如下:

    下面分析一下以上步骤:

    第一步,在浏览器中输入role_lsit,根据这个配置文件struts会找到这个xml节点。

    第二步,找到了这几节点后会进入这个类com.yilaiwen.cn.action.RoleAction,并且定位到这个类的list方法。

    第三步,第二步中类的方法会把调用ActionContext.getContext.put()方法把页面需要的数据以key-value的形式放入值栈,并且方法返回一个“list”的字符串,这个字符串就是第      三步中描述的“list”。

    第四部:然后页面定位到此页面,在前端页面中使用表达式把需要展示的信息展示出来。

    以上就是struts页面跳转的简单步骤。

    下面进入正题。。。

    下图是role_list uri对应的页面,然后我点击岗位名称为项目经理那一行的删除,我预想的是只是删除项目经理这个角色,但是结果却是全部删除了,我刷新页面又和我预想的一样。

    想了好久加查询资料才知道当 Struts  接收到一个 请求后,会先建立 Action 类的对象实例,每一个请求都对应一个Action的实例。看以下分析:

    role_list对应一个实例

    role_deled对应一个实例,但是在delete的方法中我只是做了删除操作,并没有把role重新查一遍放入值栈中,所以页面为空,给人一种全部删除的假象。

    当然你刷新时又执行了role_list重新查一遍放入值栈中所以页面显示正常。

    解决方案:

    1:删除后重定向到role_list。

    2:使用全局缓存,role_list查到对象放入缓存中,role_delete把缓存中对应的对象删除后放入值栈中。

  • 相关阅读:
    2.11 Go接口内部实现
    2.08 Go之类型分支(switch判断空接口中变量的类型)
    2.08 Go之使用空接口实现保存任意值的字典
    2.07 Go之接口和类型之间的转换
    1.28 Go之接口的嵌套组合
    2.11 Go之error接口
    libpng.md
    5_中间件.md
    8_多服务运行.md
    6_模板与渲染.md
  • 原文地址:https://www.cnblogs.com/crelle/p/10305039.html
Copyright © 2020-2023  润新知