1,struts2的form表单里面和url里面的传值以及Action所继承的父类都可以自动set属性注入action中,及继承的action中。

2,凡是url和form表单传值,在action方法中,取值都要用到 request.getParameter(),才能取得到值。用request取值,主要是看list1.action?where=0& hhString=t'还是list1.jsp?where=0&hhString=t'。就在jsp和action中这个页面用request 可以取到值。action方法最终是找到action对应的类,所以在对应的类及继承类都可以取到页面传过来的参数

方法的传值通过方法里面设置request,setAttribute()方法参数来传到页面上去。

3,怎么从页面获取action类中的值?

方法一:

使用OGNL表达式。你可以使用struts自带的标签,他们都支持OGNL,比如s:property,该标签对ognl栈里面所有的值都可以相应的获取到,不只是值栈里面的东西

<s:property value="value.name"/>:它会自动调用getValue().getName()方法。

方法二:

当然是使用JSP本身的性质了。通过request和session来获取值。

获取request有四种方法:使用Struts2 Aware拦截器,使用RequestAware拦截器,使用ActionContext类,使用ServletActionContext类。

在action中通过request和session。setAttribute()方法,页面get就行了。

总结:

在访问action的时候,struts2的那个核心过滤器会产生action的环境, 然后把action压入ognl根对象ValueStack的栈顶,

即struts2自动会帮我们把Action中的属性及对象及继承对象保存在request.setAttribute()中,不只是action中的属性,比如我们Action中list查询的集合对象,我

们可以自己设置,才能取得到值。也可以把他保存在Action中的成员变量中(没有就新建一个)。而在jsp中我们都要先设置,

<s:property value="hhString"/>
<%=request.getAttribute("hhString")%

${requestScope.listCategorys}

而<s:property>在检索属性的时候, 是从栈顶往下逐一扫描, 以扫描到的第一个属性为准(这里说的属性是javaBean的属性,而非private字段).! 所以可以经过action而跳转到的jsp页面上是可以直接访问到action的属性的!

4,,Action每次调用一次就实例化一次。里面有bean对象类型的,也会自动new对象,有继承的也会自动new,自动set值,

在jsp页面取值时就用对象.属性。但是要用struts2标签,不然没有用,用html标签不支持,除非在value中加个s:property

<input type="hidden" name="val" value="<s:property value='where1'/>"/>

action中的属性在页面取值就直接是属性。

<s:property value="name"/>

5,页面的自动注入值,可以都不用struts2标签,直接用html和name属性对的就行了

6,action实现Action只是为了execute方法的正确,和扩展的其他的方法的引用,可以不实现也可以成功,但是struts2推荐实现该接口,实现了会有更多的方便方法提供。

7,<action name="save">
 <result>/index.jsp</result>
   </action>
   如果没有对action指定class,默认是ActionSupport,没有指定method默认就是exetute方法,没有指定result的name属性,默认是success;
   没有配置type默认是forword请请转发

8,listCategorys作为成员变量是保存在值栈中的,故可以直接去,而我们收到设置的request,attr,parameters(在隐藏域传值和url传值时),session,application等五个
 的值是保存在content map中的,取值用#request.设置的值,相当于<%=requst.getAttribute()%>,struts2标签是基于<%=%>基本的jsp页面取值的.

9,OGNL//值栈和context Map谁的范围大?ognl上下文不存在谁大谁小。只是ActionContext,valueCotext两个里面都放了对象。
 先看下流程:form中的action-->web.xml(过滤请求)-->struts.xml文件(找到对应的Action类,有时交给spring处理目的都一样,iocnew出对象)--》
 -->new 出Action对象(把该对象放在context map中,只是这个对象很特殊,故放在值栈中,值栈中的对象可以直接引用,放在其他context map中的对象则要加#,
 就是值栈不是context map中的一部分,都可以用#(有request范围字段)取到值),-->当new Action对象的时候对Action里面的成员变量(属性)进行初始化,set值属性是对象,再new对象,
 再在bean中set初始化,如果页面什么都不输入,还是会new对象,会做这一步,只是取值的时候为null。

10,@@@@Action创建的对象及子对象都放在值栈中,注意Map对象的renquest,session等
 @@@@Action的对象字段只有在需要的时候,才会初始化。没用到不会new。
 @@@@当struts2接受到.action的请求后,会创建Action对象,在调用方法前??把Action类的属性放到valueStack的顶层节点。
 @@@@值栈(根)对象也可以通过EL表达式取到值。${}.
 @@@@@OGNL表达式需要配合struts2标签才能使用,否则没用。
 @@@@$用于i18n和struts配置文件获取传值,#用于获取ActionContext的值就是对象(#后面肯定有 request,session等再.值)。%将原来的文本串解析为ognl,取出值栈中的对象,对于本来就是的无效,MAP中的key解析为value
 也就是%都可以随便加的

@@@@@ 不是传过来的值,request就不要用parameter方法

11,//OGNL context包括值栈和context map上下文。当struts2接受一个请求是,会迅速创建ActionContext(Map类型),valueCotext(List类型)和action对象,

获取action中scope(request等)对象
 四种方法:1Map request = ActionContext。getContext().get(“request”);(Map request实际是存在request中的)2,实现RequestAware接口,提供set,get方法,让容器给我们ioc注值
 3,HttpServletRequest request = ServletActionContext.getRequest();.getSession()4,实现ServletRequestAware接口,让日期ioc注值

12,值栈中的值可以在struts.xml文件中用${}取值出来。
 type表示里面的action方法,可以和上一个共享action共享一个context Map上下文。和默认的轻轻转发有啥区别?
 用重定向redirect则要在result结果中?附加参数,附加参数如果是中文会乱码,EL表达式失效,要用param.username形式。forword也是可以共享同一值栈的。

13传值:只有两种方法一种是url一种是form提交,执行完之后要到另外一个页面的时候要设置是请请转发还是重定向。
url是在jsp或者action方法后面加参数或者param。一种是form提交()隐藏域,或者action注入值即文本域里面的值注入到Action中。

struts2标签不能嵌套使用

1:<s:a href="model_JobHistory.action?mid=<s:property value="#job[1]"/>&jobid=<s:propertyvalue="#job[0]"/>">出错?strus2本身标签也不能嵌套。2。我把<s:a> 修改为 html<a></a>就可以了
可改为:1用url标签
<s:url id="idUrl" action="model_JobHistory">
<s:param name="mid" value="%{#job[1]}"></s:param>
<s:param name="jobid" value="%{#job[0]}"></s:param>
</s:url>
<s:a……
这种值传不过去

<s:a href="listBusy.kemp">
        <s:param name="where" value="where"/>
        <s:param name="currentPage" value="currentPage"/>
        <s:param name="pagerMethod" value="'last'"/>
       尾页</s:a>

:2: <s:a href="lookArticle.action?article.id=%{#us.id}" onclick="browsNum(%{#us.id})" >

这两种都是url传值,可以相互替换。就是传多个参数的时候用第二种不方便

相当于jsp的<a href="save.jsp?user=<%=user%>&where=<%=where%>">

struts2不支持s:标签嵌套el表达式,
valueStack里面的值用的ognl表大式,只在struts2标签里面有效,struts2标签的value不接受任何的<%%>,或者el表达式。

11,

struts2总结【转载】的更多相关文章

  1. struts2框架 转载 精华帖

    一.Struts2简介 参考<JavaEE 轻量级框架应用与开发—S2SH> Struts框架是流行广泛的一个MVC开源实现,而Struts2是Struts框架的新一代产品,是将Strut ...

  2. Struts1、Struts2和SpringMVC剖析【转载】

    前段框架用了不少,今天就来做个总结.网上关于Struts1.Struts2.SpringMVC的文章有很多,这里的内容就是基于它们,来做个比较. 这三个框架是按照上面的顺序,依次出现的,它们都是对MV ...

  3. 转载:Struts2.3.15.1升级总结

    转载网址:http://blog.csdn.net/amosryan/article/details/10350481 由于大家都懂的原因,涉struts2的项目需要将struts2相关包升级至2.3 ...

  4. 转载:struts2和spring的结合原理(精品)

    转载网址:http://blog.sina.com.cn/s/blog_683278bc0101236z.html Ioc将所有的对象之间的关系转移到了xml配置文件中来. 在TopLogic中声明存 ...

  5. Struts2源码解析-----转载

    前面一节描述的Struts2很多东西,这节是对源码进行分析描述,通过这一节应该对struts2有了清楚认识! 还是把Struts2这个框图贴出来: 第一步:HttpServletRequest进入到S ...

  6. [转载]Struts2.1.6+Spring2.5.6+Hibernate3.3.

    原文地址:Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(一)(转载大象)作者:沉睡森林  在JavaEE企业级开发中,以SSH2框架为核心的应用非常广,大 ...

  7. 【经典转载】关于Struts2的拦截器

    拦截器(interceptor)是Struts2最强大的特性之一,也可以说是struts2的核心,拦截器可以让你在Action和result被执行之前或之后进行一些处理.同时,拦截器也可以让你将通用的 ...

  8. 使用Struts2和jQuery EasyUI实现简单CRUD系统(转载汇总)

    使用Struts2和jQuery EasyUI实现简单CRUD系统(一)——从零开始,ajax与Servlet的交互 使用Struts2和jQuery EasyUI实现简单CRUD系统(二)——aja ...

  9. 严重: Exception starting filter struts2 java.lang.NullPointerException (转载)

    严重: Exception starting filter struts2 java.lang.NullPointerException at com.opensymphony.xwork2.util ...

  10. 转载——Struts2中的constant详解

    http://bhw1015.iteye.com/blog/1258441 通过对这些属性的配置,可以改变Struts 2 框架的一些默认行为,这些配置可以在struts.xml文件中完成,也可以在s ...

随机推荐

  1. 名叫Florida的女孩问题

    近读列纳德·蒙洛迪诺的<醉汉的脚步>,读到第六章,作者举了一个超级变态的例子来解释条件概率或者说是贝叶斯概率. 1.先来看一个简单点的问题:已知所有有2个孩子的家庭,其中一个家庭2个孩子都 ...

  2. 模拟美萍加密狗--Rockey2虚拟狗(三)

    几经挣扎,我最终还是选择了虚拟设备的方法来模拟Rockey2加密狗.HID.DLL劫持+API劫持的办法技术上虽然简单些,但太繁琐了,不仅要转发大量的函数,还要Hook好几个API,向我这么懒的人可干 ...

  3. nginx启动、开机自启动、重启、关闭

    yum -y  install nginx # yum info nginx Loaded plugins: fastestmirror Loading mirror speeds from cach ...

  4. vs2010经常使用快捷键

    调试快捷键 F6: 生成解决方式 Ctrl+F6: 生成当前项目 F7: 查看代码 Shift+F7: 查看窗口设计器 F5: 启动调试 Ctrl+F5: 開始运行(不调试) Shift+F5: 停止 ...

  5. Android手机之间通过声音传输信息方法——声波通信(含project代码)

    大家可能都用过支付宝的声波支付.即两个终端同一时候打开该功能,一个终端作为发送端send,一个终端作为接收端get,send将本终端上发出的请求信息依照约定规则的算法进行声音编码,并播放出来,get端 ...

  6. hdu1003 1024 Max Sum&Max Sum Plus Plus【基础dp】

    转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4302208.html   ---by 墨染之樱花 dp是竞赛中常见的问题,也是我的弱项orz, ...

  7. linux下内存调试工具——valgrind

    1.valgrind之memcheck  最常用的工具,用来检测程序中出现的内存问题,所有对内存的读写都会被检测到,一切对malloc()/free()/new/delete的调用都会被捕获.所以,它 ...

  8. SSIS: 使用最大ID和最大日期来增量更新表

    简单三步: 1.  新增变量 MaxID和MaxCreateDate以及Variable 2.  放置一个 Execute SQL  Task ,用SQL 来获取 MaxID和MaxCreateDat ...

  9. codeforces 569A Music

    codeforces  569A   Music   解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88890#pro ...

  10. packstack安装以及centos源配置注意事项

    On CentOS:安装分为四步: 1,$ sudo yum install -y centos-release-openstack-mitaka 2,$ sudo yum update -y 3,$ ...