struts入门2

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

开始

为了有一个String类型的返回值,这个返回值可以自己定义,这个返回值要和struts里对应Action里的一个result的name属性值相同。
站长代码里是返回值是"show";在执行完ProductAction里的show方法后,最后产生的这个返回值"show"会自动跑到struts.xml里面的"showProduct"这个Action下面寻找一个name值为"show"的result,找到它,跳转到相应show.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. 在showtime方法中,将实例属性currenTime赋予一个新值
    4.1. ShowTimeAction通过request.setAttribute("currenTime", currenTime) 放在"currenTime" 这个key上,这样就方便EL表达式去取出来了
  5. 服务端跳转到show.jsp
  6. 在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就是这么设计的(无力的回答~)

猜你喜欢

转载自www.cnblogs.com/czy16/p/8874195.html
今日推荐