root根:Listjava
|
||||||||||||||
contextMap:Mapurl
|
须要熟悉ActionContext和valueStack的API。框架为咱们存数据。
a、如何获取ValueStack:
b、ValueStack中的getRoot()方法:
c、CompoundRoot是什么:
d、栈操做:
使用OGNL表达式来去,struts2的OGNL表达式必须写在struts2标签中。
a、取contextMap中的数据,需使用#
b、取contextMap里面ValueStack中对象的属性:直接写属性名
若是遇有对象属性重名,能够经过OGNL表达式,选择查找的起始位置
特殊说明:当s:property不给定value属性时,默认取栈顶对象。
OGNL的使用总结:
1.取根中对象的属性,不使用#。
2.取contextMap中key的值,要使用#。
a、setValue方法
在Jsp页面上获取【李四】
b、set方法
细节问题:
当按照以下方式,往根中存放数据时,根中元素是什么顺序?
使用<s:debug/>标签查看:
c、findValue:咱们在Jsp上调用的都是findValue
前提:
咱们应该知道,若是咱们没有往值栈(根)中放入数据的话,那么咱们的动做类默认是在值栈的栈顶。
问题:
咱们放到请求域中的属性,使用EL表达式取出来了。可是放到应用域中的属性,使用EL表达式没取出来。
分析:
咱们知道EL表达式是从四大域对象中依次查找属性。搜索范围是由小到大。page Scope————>request Scope————>sessionScope————>application Scope
可是经过测试发现,搜索完request范围后就没有继续搜索,而是返回了ValueStack中栈顶对象name属性的值。
EL表达式: page Scope————>request Scope————>sessionScope————>application Scope
OGNL表达式:page Scope————>request Scope————>valueStack(根中)————>contextMap————>sessionScope————>application Scope
注意:如下内容知道便可。
a、取contextMap中key时使用,例如<s:property value="#name" />
b、OGNL中建立Map对象时使用,例如:<s:radio list="#{'male':'男','female':'女'}" />
a、在JSP中使用EL表达式时使用,例如${name}
b、在xml配置文件中,编写OGNL表达式时使用,例如文件下载时,文件名编码。
struts.xml——>${@java.net.URLEncoder.encode(filename)}
在struts2中,有些标签的value属性取值就是一个OGNL表达式,例如<s:property value="OGNL Expression" />
还有一部分标签,value属性的取值就是普通字 符串,例如<s:textfield value="username"/>,若是想把一个普通的字符串强制当作时OGNL,就须要使用%{}把字符串套起来。
例如<s:textfield value="%{username}"/>。固然在<s:property value="%{OGNL Expression}" />也可使用,但不会这么用。
4.2、action标签
4.3、if标签,elseif标签 else标签
4.4、url和a标签(颇有用)
自动的数据回显和错误提示功能
自带的简单样式和排版
说明:UI标签中value的取值通常都是字符串。
默认主题的名称是XHTML,都是在struts的默认属性文件中定义着:default.properties
a、更改表单某个元素的默认主题:使用的是表单元素的theme属性。
b、更改表单全部主题:使用的是form标签的theme属性。
c、更改全站全部表单主题:是在struts.xml配置文件中,覆盖原有主题的设置。
遗留的问题:防不住后退,再提交。
点击后退的时候,会提示:
配置结果视图:
遗留的问题:此种解决方式,是产生了错误以后再告知用户,你错了。