- 浏览: 123660 次
- 性别:
- 来自: 成都
-
文章分类
最新评论
假定在struts2 的action的属性域中定义2个如下的List和Map变量和一个String对象
并同时提供getter和setter方法.
在 action中的execute方法中有如下的赋值操作:
在该action跳转后的视图jsp页面上使用struts2标签和OGNL表达式取以上的各个范围中的值的代码为:
显示的结果为:
说明几个地方:
1. struts2总是将action的实例放置在栈顶,因为action在值栈中,而值栈又是OGNL的根,所以引用action中的属性可以省略#
例如我们访问action中的属性testname:
2. 访问request,application,session以及请求参数parameters的值,需要使用#request.xxxx 这样的访问方式访问
3. 使用="{'第一年','第二年','第三年'}" 直接构造一个list ,使用=#{'luo1':'罗先桥1','luo2':'罗先桥2','luo3':'罗先桥3'} 直接构造了一个map
private List<String> testlist=new ArrayList<String>(); private Map<String,String> testmap=new HashMap<String,String>(); private String testname="hello,i am in valuestack"; //直接初始化了
并同时提供getter和setter方法.
在 action中的execute方法中有如下的赋值操作:
/* * OGNL测试代码 **/ HttpServletRequest request=ServletActionContext.getRequest(); //对应request HttpSession session=request.getSession(); //对应session ServletContext context=ServletActionContext.getServletContext(); // 对应application //构造普通的字符串放到三个环境中 request.setAttribute("request_name", "来自request中的name"); context.setAttribute("application_name","来自application中的name"); session.setAttribute("session_name", "来自session中的name"); //构造一个list放到request中 List<String> request_names=new ArrayList<String>(); request_names.add("reqname1"); request_names.add("reqname2"); request_names.add("reqname3"); request.setAttribute("req_names", request_names); //构造一个map放到rquest中 Map<String,String> request_maps=new HashMap<String,String>(); request_maps.put("request_map1","request_value1"); request_maps.put("request_map2","request_value2"); request_maps.put("request_map3","request_value3"); request.setAttribute("req_maps", request_maps); //构造list放到session中 List<String> session_names=new ArrayList<String>(); session_names.add("sessionname1"); session_names.add("sessionname2"); session_names.add("sessionname3"); session.setAttribute("session_names", session_names); //放到request中 //构造一个map放到session中 Map<String,String> session_maps=new HashMap<String,String>(); session_maps.put("session_map1","session_value1"); session_maps.put("session_map2","session_value2"); session_maps.put("session_map3","session_value3"); session.setAttribute("session_maps", session_maps); //赋值到ActionContext值栈中的对象 //ActionContext中的testlist testlist.add("vs144444"); testlist.add("vs24444"); testlist.add("vs34444"); testlist.add("vs44444444"); //ActionContext中的testmap testmap.put("mp1", "vsmap1"); testmap.put("mp2", "vsmap2"); testmap.put("mp3", "vsmap3"); testmap.put("mp4", "vsmap5555"); //ActionContext中的score testscore.put("语文",95); testscore.put("数学",75); testscore.put("英语",55); testscore.put("生物",65); testscore.put("物理",85); testscore.put("化学",44);
在该action跳转后的视图jsp页面上使用struts2标签和OGNL表达式取以上的各个范围中的值的代码为:
<hr>显示来自各个范围中的值<br> actionContext中的testname:<s:property value="testname" /> <br> request中的request_name:<s:property value="#request.request_name" /><br> application中的session_name:<s:property value="#application.application_name" /><br> session中的session_name:<s:property value="#session.session_name" /><br> 遍历request中的list:request_names<p> <s:iterator value="#request.req_names"> <s:property /><br> </s:iterator> 遍历request中的map:request_maps<p> <s:iterator value="#request.req_maps"> <s:property value="key"/>=<s:property value="value" /><br> </s:iterator> 遍历session中的list:session_names<p> <s:iterator value="#session.session_names"> <s:property /> <br> </s:iterator> 遍历session中的map:session_maps<p> <s:iterator value="#session.session_maps"> <s:property value="key"/>=<s:property value="value" /><br> </s:iterator> 遍历ActionContext中的testlist=========================<p> <s:iterator value="testlist" > <s:property /><br> </s:iterator> 遍历actionContext中的testmap<p> <s:iterator value="testmap"> <s:property value="key"/>=<s:property value="value" /><br> </s:iterator> 直接遍历list<p> <s:iterator value="{'第一年','第二年','第三年'}" > <s:property /><br> </s:iterator> 直接遍历map <p> <s:iterator value="#{'luo1':'罗先桥1','luo2':'罗先桥2','luo3':'罗先桥3'}"> <s:property value="key" />:<s:property value="value"/><br> </s:iterator> 遍历actionContext中的testscore这个map<p> <s:iterator value="testscore"> <s:property value="key"/>: <s:if test="value<60"> 不及格<br> </s:if> <s:elseif test="value>=60 && value<75"> 及格<br> </s:elseif> <s:elseif test="value>=75 && value<85"> 良好<br> </s:elseif> <s:else> 优秀<br> </s:else> </s:iterator>
显示的结果为:
显示来自各个范围中的值 actionContext中的testname:hello,i am in valuestack request中的request_name:来自request中的name application中的session_name:来自application中的name session中的session_name:来自session中的name 遍历request中的list:request_names reqname1 reqname2 reqname3 遍历request中的map:request_maps request_map1=request_value1 request_map2=request_value2 request_map3=request_value3 遍历session中的list:session_names sessionname1 sessionname2 sessionname3 遍历session中的map:session_maps session_map1=session_value1 session_map2=session_value2 session_map3=session_value3 遍历ActionContext中的testlist========================= vs144444 vs24444 vs34444 vs44444444 遍历actionContext中的testmap mp1=vsmap1 mp2=vsmap2 mp4=vsmap5555 mp3=vsmap3 直接遍历list 第一年 第二年 第三年 直接遍历map luo1:罗先桥1 luo2:罗先桥2 luo3:罗先桥3 遍历actionContext中的testscore这个map 物理: 优秀 语文: 优秀 英语: 不及格 数学: 良好 化学: 不及格 生物: 及格
说明几个地方:
1. struts2总是将action的实例放置在栈顶,因为action在值栈中,而值栈又是OGNL的根,所以引用action中的属性可以省略#
例如我们访问action中的属性testname:
actionContext中的testname:<s:property value="testname" /> <br>
2. 访问request,application,session以及请求参数parameters的值,需要使用#request.xxxx 这样的访问方式访问
3. 使用="{'第一年','第二年','第三年'}" 直接构造一个list ,使用=#{'luo1':'罗先桥1','luo2':'罗先桥2','luo3':'罗先桥3'} 直接构造了一个map
发表评论
-
struts2 token拦截器
2014-01-14 20:44 936之前struts2解决token必须在每个action配置 ... -
FreeMarker作为Struts2的视图
2012-07-27 17:09 797Struts使用FreeMarker作为其默认的模板技术,因此 ... -
spring security的标签库
2011-11-07 16:35 7614应用标签库:<%@ taglib prefix='sec ... -
STRUTS2 Convention零配置
2011-11-04 15:53 744从struts2.1开始,struts2不再推荐使用Codeb ... -
Hibernate - DetachedCriteria 的完整用法
2011-11-04 15:33 875Hibernate - DetachedCriteria 的完 ... -
Hibernate二级缓存及产品Oscache
2011-11-04 15:19 2016二级缓存也称进程级的缓存或SessionFactory级的缓存 ... -
struts2的struts.properties配置文件详解
2011-11-04 14:40 871struts.action.extensionThe U ... -
JPA @MappedSuperclass注解的使用说明
2011-10-31 17:51 928基于代码复用和模型分离的思想,在项目开发中使用JPA的@Map ... -
freemarker的国际化
2011-10-27 10:58 996起首在servlet中加上加载资料文件的代码 Local ... -
net.sf.json的使用
2011-10-26 17:26 2207需要jar包:ezmorph-1.0.6.jar,json-l ... -
FreeMarker设计指南
2011-10-18 17:57 788(1)模板 + 数据模型 = 输出 FreeMarke ... -
Freemarker中遍历List实例
2011-10-18 13:12 7747Freemarker中如何遍历List ... -
freemarker中使用struts2标签
2011-10-15 16:01 9891.将系统所需的标签库定义文件(也就是tld文件)复制到web ... -
Freemarker源码解析
2011-10-10 17:21 1142FreeMarker 自定义模版文 ... -
实体 Bean 注解
2011-10-06 15:36 1393一、 实体 Bean 每个持久化POJO类都是一个实体Bea ... -
警告: No configuration found for the specified action: '/myNameSpace/login.action'
2011-10-06 09:01 1089警告信息:警告: No configuration found ... -
struts2.0 标签+ftl标签
2011-10-05 14:58 969直接调用后台方法代码 <PRE class=ftl n ... -
Struts2使用 -- Convention插件
2011-10-04 11:04 835本文来自CSDN博客: http:/ ... -
struts2 validation中指定返回的result input
2011-10-04 09:23 923@InputConfig注解于方法 @InputConfig( ... -
Struts2日期格式
2011-09-30 10:48 844struts2 中的默认的日期输出并不符合我们的中文日常习惯。 ...
相关推荐
少儿编程scratch项目源代码文件案例素材-绝地求生.zip
嵌入式八股文面试题库资料知识宝典-文思创新面试题2010-04-08.zip
一种基于剪切波和特征信息检测的太阳斑点图融合算法.pdf
内容概要:本文详细介绍了并联型有源电力滤波器(APF)在Matlab/Simulink环境下的仿真研究。主要内容涵盖三个关键技术点:一是dq与αβ坐标系下的谐波和无功检测,利用dq变换和FBD技术实现实时检测;二是两相旋转坐标系(dq)与两相静止坐标系(αβ)下的PI控制,通过调整比例和积分环节实现精准控制;三是SVPWM调制方式的应用,通过优化开关时序提升系统效率和性能。文中还提供了详细的仿真介绍文档,包括模型搭建、参数设定以及结果分析。 适合人群:从事电力电子、自动化控制领域的研究人员和技术人员,尤其是对电力滤波器仿真感兴趣的读者。 使用场景及目标:适用于需要深入了解并联型APF工作原理和实现方式的研究人员,旨在通过仿真工具掌握谐波和无功检测、PI控制及SVPWM调制的具体应用。 其他说明:本文不仅提供了理论知识,还结合了实际操作步骤,使读者能够通过仿真模型加深对APF的理解。
Arduino KEY实验例程,开发板:正点原子EPS32S3,本人主页有详细实验说明可供参考。
嵌入式八股文面试题库资料知识宝典-嵌入式C语言面试题汇总(66页带答案).zip
.archivetempdebug.zip
嵌入式系统开发_CH551单片机_USB_HID复合设备模拟_基于CH551单片机的USB键盘鼠标复合设备模拟器项目_用于通过CH551微控制器模拟USB键盘和鼠标输入设备_实现硬
少儿编程scratch项目源代码文件案例素材-剑客冲刺.zip
少儿编程scratch项目源代码文件案例素材-火影.zip
内容概要:本文详细介绍了两极式单相光伏并网系统的组成及其仿真优化方法。前级采用Boost电路结合扰动观察法(P&O)进行最大功率点跟踪(MPPT),将光伏板输出电压提升至并网所需水平;后级利用全桥逆变加L型滤波以及电压外环电流内环控制,确保并网电流与电网电压同频同相,实现高效稳定的并网传输。文中还提供了具体的仿真技巧,如开关频率设置、L滤波参数计算和并网瞬间软启动等,最终实现了98.2%的系统效率和低于0.39%的总谐波失真率(THD)。 适合人群:从事光伏并网系统研究、设计和开发的技术人员,特别是对Boost电路、MPPT算法、逆变技术和双环控制系统感兴趣的工程师。 使用场景及目标:适用于希望深入了解两极式单相光伏并网系统的工作原理和技术细节的研究人员和工程师。目标是在实际项目中应用这些理论和技术,提高光伏并网系统的效率和稳定性。 其他说明:文中提供的仿真技巧和伪代码有助于读者更好地理解和实现相关算法,在实践中不断优化系统性能。同时,注意电网电压跌落时快速切换到孤岛模式的需求,确保系统的安全性和可靠性。
矢量边界,行政区域边界,精确到乡镇街道,可直接导入arcgis使用
嵌入式八股文面试题库资料知识宝典-嵌入式c面试.zip
嵌入式八股文面试题库资料知识宝典-I2C总线.zip
内容概要:本文详细介绍了三种注浆模型——随机裂隙网络注浆模型、基于两相达西定律的注浆模型、基于层流和水平集的注浆扩散模型。首先,随机裂隙网络注浆模型基于地质学原理,模拟裂隙网络发育的实际地质情况,在不同注浆压力下进行注浆作业,以增强地基稳定性和提高承载能力。其次,基于两相达西定律的注浆模型利用数学公式模拟裂隙网络中的流体输送过程,适用于裂隙网络地质条件下的注浆效果分析。最后,基于层流和水平集的注浆扩散模型通过引入层流特性和水平集方法,更准确地模拟注浆过程中的扩散过程。文中还讨论了不同注浆压力对注浆效果的影响,并提出了优化建议。 适合人群:从事岩土工程、地基加固等相关领域的工程师和技术人员。 使用场景及目标:①帮助工程师选择合适的注浆模型和注浆压力;②为实际工程项目提供理论支持和技术指导;③提升地基加固的效果和效率。 其他说明:文章强调了在实际应用中需要结合地质条件、裂隙网络特点等因素进行综合分析,以达到最佳注浆效果。同时,鼓励不断创新注浆工艺和方法,以满足日益增长的地基加固需求。
内容概要:本文详细比较了COMSOL Multiphysics软件5.5和6.0版本在模拟Ar棒板粗通道流注放电现象方面的异同。重点探讨了不同版本在处理电子密度、电子温度、电场强度以及三维视图等方面的优缺点。文中不仅介绍了各版本特有的操作方式和技术特点,还提供了具体的代码实例来展示如何进行精确的仿真设置。此外,文章还讨论了网格划分、三维数据提取和电场强度后处理等方面的技术难点及其解决方案。 适合人群:从事等离子体物理研究的专业人士,尤其是熟悉COMSOL Multiphysics软件并希望深入了解其最新特性的研究人员。 使用场景及目标:帮助用户选择合适的COMSOL版本进行高效、精确的等离子体仿真研究,特别是在处理复杂的Ar棒板粗通道流注放电现象时提供指导。 其他说明:文章强调了在实际应用中,选择COMSOL版本不仅要考虑便捷性和视觉效果,还需兼顾仿真精度和可控性。
嵌入式八股文面试题库资料知识宝典-C and C++ normal interview_8.doc.zip
内容概要:本文详细介绍了在现代通信系统中,抗干扰技术的重要性和具体应用方法。首先阐述了抗干扰技术的背景及其重要性,随后分别讨论了捷变频技术和波形优化技术的具体机制和优势。捷变频技术能快速改变工作频率,防止被干扰源锁定;波形优化技术则通过改进信号波形来提升抗干扰性能。接着,文章探讨了两种技术相结合的协同效应,最后重点介绍了发射信号及接收滤波器联合优化的抗干扰策略(ISRJ),这是一种综合性优化手段,旨在最大化抗干扰效果并提高通信质量。 适合人群:从事通信工程及相关领域的研究人员和技术人员,尤其是关注抗干扰技术的专业人士。 使用场景及目标:适用于需要提升通信系统稳定性和可靠性的场合,如军事通信、卫星通信等领域。目标是帮助技术人员理解和掌握先进的抗干扰技术,应用于实际项目中。 其他说明:文中提到的技术不仅限于理论层面,还涉及具体的实施细节和应用场景,有助于读者深入理解并应用于实践中。
少儿编程scratch项目源代码文件案例素材-吉他英雄.zip
内容概要:本文详细探讨了独立光伏系统的仿真模型及其控制策略。首先介绍了光伏组串模型的搭建方法,利用Simulink中的S函数实现特性曲线,确保高精度输出。接着重点讨论了Boost升压电路的改进型功率环控制策略,通过非线性积分器有效避免了占空比过高的风险,使系统震荡幅度显著降低。对于储能部分,采用双向DCDC转换器,实现了充放电模式间的平滑切换,并通过互补PWM技术增强了硬件死区保护效果。逆变器部分则采用了单极调制方式,减少了开关损耗,并优化了LC滤波参数的设计,确保了低谐波失真率。此外,还设计了一个基于继电器的智能负载模拟系统,能够根据交流电压的变化自动调节负载,提高了仿真的效率和准确性。最后,通过对整个系统的动态优先级管理,使得光伏出力波动时储能系统可以迅速响应,保持直流母线电压稳定。 适合人群:从事光伏系统设计、仿真建模以及电力电子领域的工程师和技术人员。 使用场景及目标:适用于需要深入了解独立光伏系统内部工作原理的研究人员,帮助他们掌握从光伏组串到逆变器各环节的具体实现细节,为实际工程项目提供可靠的理论支持和技术指导。 其他说明:文中提供了大量MATLAB/Simulink代码片段和具体参数设置建议,便于读者理解和复现实验结果。同时强调了不同控制策略之间的对比分析,指出了最优解的选择依据。