Struts(☆多查文档)在Action中,用addFielderror(“name”,“value”)方法,然后在页面中用S:fielderrorfieldname=”name”/即可取得值Struts2访问web元素:方法一:在页面中通过from表单提交数据,在action中通过ActionContext.getContext.get(“request”);ActionContext.getContext.getSession();ActionContext.getContext.getApplication();ActionContext也就是通过debug所看到的StackContext中的值取得ActionContext中的值时,需要加“#”,如s:propertyvalue=”#request.value”/s:propertyvalue=”#attr”/能取得request,session.application中的所有值方法二(常用):实现接口:RequestAwareSessionAwareApplicationAware在action中,定义变量MapString,objectrequest;并加上setter方法,根据DI(IOC)的思想,由struts注入request,然后就可以对Request进入存值和取值在strtus.xml中配置默认的actiondefault-action-refname=”**”/这样,在浏览器输入不存在的网址,即会跳转到此AactionResult的类型Dispatcher:jsp:forward..服务器跳转,只能跳转到页面,显示的是action地址,两个Action之间共享值栈,不需要传递参数Redirect:客户端跳转,只能跳转到某个页面,显示的jsp的地址,需要传递参数Chain:jsp:forward..服务器跳转,跳转到某个actionredirectAction:客户端跳转,跳转到某个action全局结果集packagename=”*1”namespace=”/”extends=”struts-default”global-resultsresultname=””/global-results/package如果其它包个也想用,用extendspackagename=”*2”namespace=”/*”extends=”*1”OGNL(ObjectGraphNavigationLanguage)访问值栈中action的普通属性:s:propertyvalue=”var”/访问值栈中action的普通方法:s:propertyvalue=”function()”/访问值栈中对象的普通属性(有getset方法):s:propertyvalue=”entity.var”/,s:propertyvalue=user['age']/s:propertyvalue=”entity1.entity2..var”/,但此时必须自己new或手动给对象的属性传值,此时entity必须有一个空的构造方法访问值栈中对象的普通方法:s:propertyvalue=”entity1.function()”/访问静态方法:s:propertyvalue=@类名.函数名@方法名()/访问静态属性:s:propertyvalue=@类名.函数名@属性名/访问Math类的静态方法:s:propertyvalue=@@max(2,3)/访问List:s:propertyvalue=users/访问List中某个元素:s:propertyvalue=users[1]/访问List中元素某个属性的集合:s:propertyvalue=users.{age}/访问List中元素某个属性的集合中的特定值:s:propertyvalue=users.{age}[0]/|s:propertyvalue=users[0].age/(常用这个)访问Set:s:propertyvalue=dogs/访问Set中某个元素:s:propertyvalue=dogs[1]/(取不到值,因为set没有顺序,不能取到指定的第几个元素)访问Map:s:propertyvalue=dogMap/访问Map中某个元素:s:propertyvalue=dogMap.dog101/|s:propertyvalue=dogMap['dog101']/|s:propertyvalue=dogMap[\dog101\]/访问Map中所有的key:s:propertyvalue=dogMap.keys/访问Map中所有的value:s:propertyvalue=dogMap.values/访问容器的大小:s:propertyvalue=dogMap.size()/|s:propertyvalue=users.size/(加不加括号都可)投影(过滤):s:propertyvalue=users.{?#this.age==1}[0]/投影:s:propertyvalue=users.{^#this.age1}.{age}/(第一个age1的user的age集合,^表示第一个)投影:s:propertyvalue=users.{$#this.age1}.{age}/(最后一个age1的user的age集合,$表示最后一个)投影:s:propertyvalue=users.{$#this.age1}.{age}==null/(判断集合是否为空)[]:s:propertyvalue=[0].username/(访问栈中的从栈顶到栈底的所有object的集合,username先从栈顶那个找,找不到找第二个,最后找栈底)Struts-Tagsproperty:s:propertyvalue=username/property取值为字符串:s:propertyvalue='username'/property设定默认值:s:propertyvalue=admindefault=管理员/property设定HTML:s:propertyvalue='hr/'escape=false/(不解析html标签)bean定义bean,并使用param来设定新的属性值:s:beanname=com.bjsxt.struts2.tags.Dogs:paramname=namevalue='pp'/s:params:propertyvalue=name//s:beaninclude_include1.html包含静态英文文件,说明%用法s:setvar=incPagevalue=%{'/_include1.html'}/s:includevalue=%{#incPage}/s:includes:iteratorvalue={'aaa','bbb','ccc'}var=xs:propertyvalue=#x.toUpperCase()/|/s:iterators:iteratorvalue={'aaa','bbb','ccc'}status=statuss:property/|(取出当前值)遍历过的元素总数:s:propertyvalue=#status.count/|遍历过的元素索引:s:propertyvalue=#status.index/|当前是偶数?:s:propertyvalue=#status.even/|当前是奇数?:s:propertyvalue=#status.odd/|是第一个元素吗?:s:propertyvalue=#status.first/|是最后一个元素吗?:s:propertyvalue=#status.last//s:iterators:iteratorvalue=#{1:'a',2:'b',3:'c'}var=x(构造map,需要加#)s:propertyvalue=#x.key/|s:propertyvalue=#x.value/br//s:iterators:subsetsource=”myList”count=”2”start=”3”s:iterators:property//s:iterator/s:subset1.css(覆盖struts2原来的css)2.覆盖单个文件$#%的区别$用于i18n和struts的配置文件#取得ActionContext的值%将原来的文本属性解析为OGNL表达式,对本来就是OGNL的属性不起作用JavaScript区分大小写,基于对象JSP注释和HTML注释的区别HTML注释:!----能在客户端显示一个注释,标记内的所有JSP脚本元素、指令和动作正常执行,也就是说编译器会扫描注释内的代码,如:!—这个页面加载于%=newjava.util.Date().toString()%--,在客户端HTML源代码中显示为:!—这个页面加载于SATOct1120:38:20CST2011--JSP注释:%%JSP引擎对JSP注释不作任何处理,既不发送到客户端,也不在客户端的JSP页面显示,客户端源代码中是看不到的JavaScript注释scripttype=”text/JavaScript”!--****//--/scriptarrayObject.splice(index,howmany,element1,.....,elementX)Parameter参数Description描述index必选项。指定在哪个位置加入/删除元素,必须是数字howmany必选项。指定有多少元素应该被删除。必须是数字,可以是0element1可选。指定要加入到数组中的新元素elementX可选。可以加入多个元素如:scripttype=text/javascriptvararr=newArray(5)arr[0]=Janiarr[1]=Hegearr[2]=Stalearr[3]=KaiJimarr[4]=Borgedocument.write(arr+br/)arr.splice(2,0,Lene)document.write(arr+br/)/script输出结果为:Jani,Hege,Stale,KaiJim,BorgeJani,Hege,Lene,Stale,KaiJim,BorgeWindow.setTimeout(“function()”,val);表示多少毫秒(val)之后执行function()函数,Window.status=“*”,用来设置状态列(statusbar)显示的文字内容正则表达式正则表达式被定义在一对“/”之间,如varfilter=/a$/可以匹配任意以字母a结尾的字符串元字符:在正则表达式中有特殊意义的专用字符,用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式,如“+”、“?”、“*”定位符:用于规定匹配模式在目标对象中的出现位置,如“^”、“$”、“\b”、“\B”^匹配字符串的开头,在多行检索中,匹配一行的开头$匹配字符串的结尾,在多行检索中,匹配一行的结尾/b匹配一个词语的边界。简而言之,就是位于字符/w和/W之间的位置,或位于字符/w和字符串的开头和结尾的位置(但注意:[/b]匹配的是退格符)/B匹配非词语边界的字符限定符:用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配,默认情况下,正则表达式使用最长(也叫贪婪)匹配原则,*、+和?限定符都是贪婪的,因为它们会尽可能多的匹配文字,在其他限定符(*、+{n}、{n,}、{n,m})之后加上“?”,就会变成最短(也叫非贪婪)匹配