Struts2基础
#的用法:
1、从map栈中取值,
2、从对象栈中值则不用加#号(如果通过set放进对象栈的对象,则通过对象名.属性来取)
%用法:
1、文本框<s:textfieldname="test"value="%{#request.text}"></s:textfield>
2、配置result中使用<resultname="text">ognl/%{#test-url}</result>
3、输出字符串:<s:propertyvalue="%{'<hr>hr'}"escape="false"/>
$用法:
$(对象栈的属性):这样就可以在非struts2标签中使用对象栈的值
Property标签:
1、escape属性,默认为true,设置为false时,不转义
<s:propertyvalue="%{'<hr>hr'}"escape="false"/>
2、default属性,当value的值不存在是,输出默认值
s:propertyvalue="#xixifasf"default="dafhodsh"/>
3、<s:property/>:什么属性都不写,表示输出栈顶元素值
Debug标签:
<s:debug></s:debug>//利用这个标签可以输出ognlcontext中所有的值
注意:注释(通用)
<!--大家好-->
该注释方法仍然会被编译,如果是纯文本则在源代码中可以显示;如果含有代码,则会编译成对应值输出
<%--<s:setvalue="%{'你好'}"var="aa"scope="request"></s:set>--%>
该注释方法,不回被编译,即使在源代码中也看不到
“valueStack”=OgnlValueStack
.context=OgnlContext
._root=CompoundRoot//对象堆栈
._values=HashMap<K.V>//Map堆栈
.table=HashMap$Entry<K.V>
[2]是application对应的地址
[14]是session对应的地址
[23]是request对应的地址
[24]是action对应的地址
[27]是parameters对应的地址
.root=CompoundRoot//对象堆栈
elementData=Object[2]
.[0]=ValueStackAction
.[1]=DefaultTextProvider
1、<s:debug></s:debug>//利用这个标签可以输出ognlcontext中所有的值
Push标签:
将value放到对象栈顶,但只能在内部才能取到对应的值,标签结束,值便消失
<s:pushvalue="%{'大家好'}">
<s:property/>
<s:debug></s:debug>
</s:push>
2、测试set标签:<br>
<s:setvalue="#request.request_username"var="aaaaa"scope="request"></s:set>
<s:propertyvalue="#request.aaaaa"/>
说明:这样的情况,aaaaa的key值会出现在request域中。
<s:setvalue="#request.request_username"var="aaaaa"></s:set>
<s:propertyvalue="#request.aaaaa"/>
说明:这种写法aaaaa会作为一个key值存在ognl的map中。所以利用
<s:propertyvalue="#aaaaa"/>也能输出值。
3、显示map栈中域的值
输出request域中的值<s:propertyvalue="#request.request_name"/><br/>
//attr表示依次在各域中查找
输出session域中的值<s:propertyvalue="#attr.session_name"/><br/>
输出application域中的值<s:propertyvalue="#application.application_name"/>
显示map栈中map的值:<s:propertyvalue="#xixi"/>
4、Radio标签
<s:radiolist={'"#male':'男','female':'女'}"name="sex"label="性别"></s:radio><br/>
<!--两者写法效果相同-->
<s:radiolist="#request.map"name="sex"label="性别"/>
4、取值方法
ValueStack的push方法,push(student);将对象直接放到栈顶中去
ValueStack的set方法,set("person",person);将对象放到对象栈的HashMap中去
ValueStack的setValue(“comment”,update)方法,设置栈顶参数值
ValueStack的getValue()方法,获取栈顶参数值getValueininterfaceMap.Entry
Result中name的作用,当一个action中有多个result时,就需要用name来区别
<resultname="scope">ognl/showscope.jsp</result>
5、配置常量
Constantd的配置可以覆盖掉default.properties文件中的,还可以覆盖struts-default.xml,struts-plugin.xml这些xml文件中关于常量的内容
<constantname=”struts.ui.theme”value=”simple”></constant>
注意:value值如果有多个,可以用”,“隔开
6、result中的type值
redirect和redirectActionchain的区别
定义:当使用type=“redirectAction”或type=“redirect”提交到一个action并且需要传递一个参数时。
这里是有区别的:
1、使用type=“redirectAction”时,结果就只能写Action的配置名,不能带有后缀:“.action”
2、使用type=“redirect”时,结果应是action配置名+后缀名
Struts2常用标签
不会的时候查看内存快照是个好方法
struts的标签不懂的,拿到页面一看源代码就行了
form默认method为post
用了ognl表达式action="/userAction_doEdit.action"不用${pageContext.request.contextPath}了
讲了表单
radio标签
<s:radiolist="{'JavaEE+Android课程','Net+WindowPhone课程','JavaEE+物联云计算课程'}"
onselect="courseName"name="courseName"label="意向课程"></s:radio>
select标签
s:select
list属性代表数据的来源
listKey相当于option元素中的value属性的值
listValue相当于option元素中要显示的值
headerKey是最上面的option元素的value的值
headerValue是最上面的option元素的要显示的值
name属性,可以实现回显功能
s:checkboxlist
list数据的来源
listKeyvalue的值
listValue显示的值
name必须要有
<!--没有解决默认选中的问题-->
<s:checkboxlistlist="#list"listKey="sid"listValue="sname"name="用户名"></s:checkboxlist>
s:iterator属性都存在map栈中
value数据来源,没有则默认找栈顶元素对象
[var]可选,表示当前迭代对象,当多层循环时要用
status当前元素一些属性值
count遍历了的第几个数据
index正在遍历的索引值
even是否为偶数
odd是否为奇数
说明:迭代的时候,struts2会把元素对象临时放到栈顶,循环结束后删除
格式:
list的迭代
<s:iteratorvalue="#personList"var="pList"status="st">
<trclass="<s:properyvalue="#st.even?'even':'odd'">
<s:porpertyvalue="#pList.pid"/>
<s:porpertyvalue="#pList.pname"/>
<s:porpertyvalue="#st.count"/>
<s:porpertyvalue="#st.index"/>
<s:porpertyvalue="#st.even"/>
<s:porpertyvalue="#st.odd"/>
<s:iterator/>
特别的:将personListpush到栈顶
则修改为<s:iterator>
Map的迭代,value得到的是entry,对应key、value
<s:iteratorvalue="#map">
</s:porpertyvalue="key">
</s:porpertyvalue="value.pid">
</s:porpertyvalue="value.pname">
<s:iterator/>
多层的迭代(list<map>)
<s:iteratorvalue="#lists">
<s:iterator[value="top"]>
<s:porpertyvalue="key"/>
</s:porpertyvalue="value.pid">
</s:porpertyvalue="value.pname"/
</s:iterator>
</s:iterator>
ifelse语句
<s:iftest="">
</s:if>
<s:elseiftest="">
</s:elseif>
<s:else>
</s:else>
超级链接语句
<s:aaction=""></s:a>
1、针对struts2.1的版本
如果超级要加一个参数
正确的写法是tagAction_show_href_ifelse?pid=%{pid}
错误的写法是tagAction_show_href_ifelse.action?pid=%{pid}
2、EL表达式$与ognl表达式问题
ognl标签外部可以使用el表达式,ognl标签内不可以使用
html标签中,只能使用el表达式
<s:aaction="tagAction_show_href_ifelse?pid=${pid}"></s:a>
分享到:
相关推荐
本文档中总结了struts2的配置文件的介绍,action 类的三种编写方法,Struts2框架执行流程,三种获取jsp中数据的方法,action类中数据封装的方法
struts2学习总结之基础篇,好好学习吧。。。 愿与广大热爱编程人士共享!
该文当内是本人该干刚学习的struts2的一个总结,希望对大家有所帮助!
1、是mvc的基础,其他的框架比如struts1,struts2,webwork都是从servlet基础上发展过来的。所以掌握servlet是掌握mvc的关键。 2、Servlet把最底层的api暴漏给程序员,使程序员更能清楚的了解mvc的各个特点。 3、...
集成Struts框架实例和需要的夹包,是学Struts框架入门必备。
个人学习struts基础的一些总结,基于myeclipse的............
这个是本人自学struts2框架时的总结笔记,里面关于struts2的基本知识很是详尽,如果想要进阶的就不要看了,这只是struts2基础的笔记,个人学习用的,绝不掺假!
十二、总结 本教程对struts2的基本知识进行了一些说明,关于struts2的更多详细内容应参看struts2的官方文档及提供的app实例。 下面对struts2的基本执行流程作一简要说明,此流程说明可以结合官方提供的struts2结构图...
综合实训 基于Struts2的Java专题学习网
Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理...
SSH整合示例(详情见我博客专栏)之前的博客我们总结了spring基础、spring分别整合struts2、hibernate、mybatis等,今天我们来同时整合下 struts、spring、hibernate,也就是所谓的 ssh 。 整合流程: 1 首先整合...
它是在 struts 和WebWork的技术基础上进行了合并,全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得...
所有struts2的基础常用配置案例的总结
3.2. Struts2的Action调用业务逻辑 - 19 - 3.2.1. 登录Action--OpenIDLoginAction - 19 - 3.2.2. 进入的Action—FirstPageAction - 20 - 3.3. JSP页面 - 20 - 3.4. 运行示例 - 21 - 3.4.1. 登录 - 21 - 3.4.2. ...
struts2的请求数据封装,OGNL基本语法和Struts2表单验证等一些基础概念总结和理解,自己考试复习用,不严谨不客观。
这个是struts2全部的技术笔记案例 里面有代码(不适合新手看,需要有基础的看 )可以完善技术体系
总结自《Java Web 开发实践教程》 清华大学出版社 ,加上了一些个人的体会,把原书中表达不是很清楚的地方进行重新描述。
由于班级里面的好多项目都是基于JAVA开发的,因此在学习完一些JAVA基础后,就开始学习Struts,今天是我学习struts的第三天,把这几天学习的内容总结了一些,希望能够帮助到像我一样的新手,也希望高手多多指点,...
structs2基础学习,不过是基于小白级的,学习参考可以
这个是我参加Java软件工程师培训后整理的总结,DOC格式,全是精华,花了不少心血整理的