struts入门2

不同开发人员有不同的习惯, pojo,bean,entity,model 等等,都是指的它~--------实体包名字

开始

重点:

为了有一个String类型的返回值,这个返回值可以自己定义,这个返回值要和struts里对应Action里的一个result的name属性值相同。
这里是返回值是"diyshow";在执行完ShowTimeAction里的showtime方法后,最后产生的这个返回值"diyshow"会自动跑到struts.xml里面的"showTime"这个Action下面寻找一个name值为"diyshow"的result,找到它,跳转到相应showTime.jsp。

果然都是:${XXX}会访问对应的Action的 geXXX()方法 ,然后再把这个XX对象通过request.setAttribute("XX", XX 放在"product" 这个key上,这样就方便EL表达式去取出来了

================
因为我测试过 ,假如在对应的Action 做一下手脚的话,请看下图

而现在假如我在上面基础上 继续把,private Date date ; 改为公有成员

又成功出现了

所以这证明了一个流程

  1. 访问路径 /showTime
  2. 所有访问都被struts的filter所拦截,并进入struts的工作流程
  3. 根据配置文件struts.xml, 会执行ShowTimeAction的showtime方法
    4.1. ShowTimeAction通过request.setAttribute("currenTime", currenTime) 放在"currenTime" 这个key上,这样就方便EL表达式去取出来了。似乎只要是这个Action里的属性,他都会放到作用域里
    4.2 在showtime方法中会返回一个String , 在上面例子返回的是 "diyshow"
    5 自动跑到struts.xml里面的"showTime"这个Action下面寻找一个name值为"diyshow"的result,找到它,跳转到相应showTime.jsp。
  4. 在showTime.jsp中,${currenTime}就直接取值了

我的推测1:只要那个Action里面有什么属性,struts都会帮我们将它放入requsest域里。
**我的推测2:struts当看到jsp里有${currenTime},然后再访问对应的Action的 getCurrenTime()方法拿到返回的对象,然后再把currenTime对象通过request.setAttribute("currenTime", currenTime)

严格的说是Action把数据放在了request的setAttribute("product") 上, JSP的EL表达式${product.name} 是从request里取的数据。

问题:${date}是什么时候创建出来的
答:通过struts的getData()方法取出来的,或假如是data成员是公有的话,可以直接就拿出
因为Struts就是这么设计的(无力的回答~)

问题:为什么${date}会访问对应的Action的 getData()方法
答:(首先要注意EL表达式从哪些对象中获取数据,有Page、Request、Session……等)在这里EL表达式访问的是当前 request,而不是Action。ShowTimeAction中有一个date属性,Struts2会自动调用 request.setAttribute("date",date)将date对象保存到request中,所以 EL表达式才能取到date对象。我是这么理解的,请大家指教
因为Struts就是这么设计的(无力的回答~)

posted @ 2018-04-18 13:26  Pororo  阅读(148)  评论(0编辑  收藏  举报