Struts2常用标签总结

本文详细介绍了 Struts2 框架中的核心标签,包括 property、iterator、ifelse、URL 和 select 等标签的使用方法及注意事项。通过实例展示了如何利用这些标签进行数据访问、逻辑控制及表单构建。


一 介绍
1.Struts2的作用 
Struts2标签库提供了主题、模板支持,极大地简化了视图页面的编写,而且,struts2的主题、模板都提供了很好的扩展性。实现了更好的代码复用。Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求。
Struts2的标签库有一个巨大的改进之处,struts2标签库的标签不依赖于任何表现层技术,也就是说strtus2提供了大部分标签,可以在各种表现技术中使用。包括最常用的jsp页面,也可以说Velocity和FreeMarker等模板技术中的使用
2.Struts2分类
(1)UI标签:(User Interface, 用户界面)标签,主要用于生成HTML元素标签,UI标签又可分为表单标签非表单标签
(2)非UI标签,主要用于数据访问,逻辑控制等的标签。非UI标签可分为流程控制标签(包括用于实现分支、循环等流程控制的标签)和数据访问标签(主要包括用户输出ValueStack中的值,完成国际化等功能的)
(3)ajax标签
3.Struts2标签使用前的准备:
(1)在要使用标签的jsp页面引入标签库: 
<%@ taglib uri="/struts-tags" prefix="s"%>
(2)在web.xml中声明要使用的标签 这样是struts2 2.3.1.2版本的引入方式
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
4.标签的使用
(1)property标签

重要属性:

value指定在页面上的输出的值


用于输出指定的值:
<s:property value="%{@cn.csdn.hr.domain.User@Name}"/><br/>
<s:property value="@cn.csdn.hr.domain.User@Name"/><Br/><!-- 以上两种方法都可以 -->
<s:property value="%{@cn.csdn.hr.domain.User@study()}"/>
以上可以访问某一个包的类的属性的集中方式,study()是访问方法的方法,并输出。


以下用java代码代替的,访问某一个范围内的属性
<%
//采用pageContext对象往page范围内存入值来 验证#attr搜索顺序是从page开始的 ,搜索的顺序为:page,reques,session,application。
set存值的时候存到的是request中,在jsp页面中访问的时候不用加任何的标识符,即可直接访问,如果不同的作用域不一样了,
pageContext.setAttribute("name", "laoowang", PageContext.PAGE_SCOPE);
%>
<s:property value="#attr.name" />


假设在action中设置了不同作用域的类
不同的作用域的标签的访问:

<h3>获取的是requet中的对象值</h3>
第一种方式:<s:property value="#request.user1.realName"/>
<br/>
第二种方式:<s:property value="#request.user1['realName']"/>
<br/>
第三种方式:<s:property value="#user1.realName"/>
<br/>
第四种方式:<s:property value="#user1['realName']"/>
<br/>
第五种方式:${requestScope.user1.realName } || ${requestScope.user1['realName'] }

第六种:<s:property value="#attr.user1.realName"/>
attr对象按page==> request sessionapplictio找的


<h3>获取session中的值</h3>
第一种方式:<s:property value="#session.user1.realName"/>
<br/>
第二种方式:<s:property value="#session.user1['realName']"/>


第五种方式:${sessionScope.user1.realName } || ${sessionScope.user1['realName'] }

<h3>获取application中的对象的值</h3>
第一种方式:<s:property value="#application.user1.realName"/>
<br/>
第二种方式:<s:property value="#application.user1['realName']"/>


第五种方式:${applicationScope.user1.realName } || ${applicationScope.user1['realName'] }

(2)iterator标签的使用

重要属性:

value:可选属性,指定被迭代的集合,如果没有设置该属性,则使用ValueStack栈顶的集合。
id:可选属性,指定集合里元素的id。
status:可选属性,该属性指定迭代时的IteratorStatus实例。该实例包含如下几个方法:
int getCount(),返回当前迭代了几个元素。
int getIndex(),返回当前迭代元素的索引。
boolean isEven(),返回当前被迭代元素的索引是否是偶数
boolean isOdd(),返回当前被迭代元素的索引是否是奇数
boolean isFirst(),返回当前被迭代元素是否是第一个元素。
boolean isLast(),返回当前被迭代元素是否是最后一个元素。


第一种:list集合
<!-- 设置set集合 value-->
<!-- status 可选属性,该属性指定迭代时的IteratorStatus实例 -->
<!-- value="#attr.list" list存放到了request中 可以value="#request.list"
statu.odd返回当前被迭代元素的索引是否是奇数
-->
<s:set name="list" value="{'a','b','c','d'}"></s:set>

set标签用于赋予变量一个特定范围的值。
1.set的属性:
    a.var:设置变量的名称,不推荐使用id和name设置变量的名称;
    b.value:设置变量的值;
    c.scope:作用范围,可以设置page,request,session,application,action;
2.不设置scope时,变量默认保存在request和ActionContext中。
<s:iterator var="ent" value="#request.list" status="statu">
<s:if test="%{#statu.odd}">
<font color="red"><s:property value="#ent" />
</font>
</s:if>
<s:else>
<s:property value="#ent" />
</s:else>
</s:iterator>

第二种:map集合中的使用
<h3>Map集合</h3>
<!-- map集合的特点: 
语法格式:# {key:value,key1:value1,key2:value2,.....} 
以上的语法中就直接生成了一个Map类型的集合,该Map对象中的每个key-value对象之间用英文的冒号隔开 
,多个元素之间用逗号分隔。 
-->
</div>

<s:set var="map" value="#{'1':'laowang','2':'老王','3':'猩猩'}"></s:set>
遍历Map:
<br />
<s:iterator value="#map">
<s:property value="key" />:::<s:property value="value" />
<Br />
</s:iterator>\

第三种:集合的变量
<h3>遍历集合:::</h3>
<div>
<!-- 遍历出价格大于3000的 -->
<s:iterator var="user" value="#session['users']">
<s:if test="%{#user['price']>3000}">
<s:property value="#user['price']"/>
</s:if>
</s:iterator>


<hr color="blue"/><!-- $是取出价格 大于3000的最后一个值 -->
<s:iterator var="u" value="#session.users.{$(#this['price']>3000)}">
<s:property value="price"/>
</s:iterator>
</div>
注:users是User的对象,price是User中的一个属性

简述一下iterator的介绍:
iterator标签用于对集合进行迭代,这里的集合包含List、Set和数组。
<s:set name="list" value="{'zhangming','xiaoi','liming'}" />
<s:iterator value="#list" status="st">
<font color=<s:if test="#st.odd">red</s:if><s:else>blue</s:else>>
<s:property /></font><br>
</s:iterator> 


(3)if else语句的使用

重要属性:

test=“”内跟bool表达式


不同数据类型的比较
< s:if test="strValue=='value'">  
String比较  
< /s:if>    

< s:if test="intValue==3"> 
int比较  
< /s:if>    

< s:if test="doubleValue==1.23"> 
double比较  
< /s:if> 

使用ONGL表达式取值

<s:set name="age" value="21" />
<s:if test="#age==23">
23
</s:if>
<s:elseif test="#age==21">
21
</s:elseif>
<s:else>
都不等
</s:else>

(4)URL标签
<!-- 声明一个URL地址 -->
<s:url action="test" namespace="/tag" var="add">
<s:param name="username">laowangang</s:param>
<s:param name="id">12</s:param>
</s:url>
<s:a href="%{add}">测试URL</s:a>
<s:a action="test" namespace="/tag"></s:a>
以上的两个<s:a>标签的作用是一样的。
(5)data标签
<%
pageContext.setAttribute("birth",new Date(200,03,10),PageContext.REQUEST_SCOPE);
%>
<s:date name="#request.birth" format="yyyy年MM月dd日"/>
<s:date name="#request.birth" nice="true"/>
这个标签是按照format的格式去输出的。

(6)表单


<h1>from表单</h1>
<s:form action="test" namespace="/tag">
<s:textfield label="用户名" name="uname" tooltip="你的名字" javascriptTooltip="false"></s:textfield>
<s:textarea name="rmake" cols="40" rows="20" tooltipDelay="300" tooltip="hi" label="备注" javascriptTooltip="true"></s:textarea>
<s:password label="密码" name="upass"></s:password>
<s:file name="file" label="上传文件"></s:file>
<s:hidden name="id" value="1"></s:hidden>

(7)select标签

struts2的select标签中,常用的有以下几个属性:

headerValue : 默认值value
headerKey :    默认name
list : 源数据 (可以在action方法里从数据库获取list)
name : 被选数据存放的位置(这里我方在对象obj的属性值userName中<需在action中定义该对象>)
listKey : 下拉选项的name
listValue : 下拉选项的value
value : 默认值

(1)struts2中的select 标签中,必须设置的属性只有一个,即是list。

(2)select标签的list中必须有值,不然会报错。如果没有值,可以加上headerKey, headerValue,这样就可以通过了。如:

xml 代码
<s:select   name="geElement.childType" list="childTypeList" listKey="key"  listValue="value" headerKey="0" headerValue="--请选择子类型--"/>   
其中,即使list中有值,我们也通常会加上headerKey, headerValue,即列表中显示的第一个选项。注意,headerKey不可以为空,不可以为-1。

(3)list属性:通常是在action中定义的,必须是一个可以迭代的源,如为一个List, Map, Set等。如果是一个Map,那么map的key就对应于select标签中的value,map中的value就对应于select标签中的option。而如果是一个List或者是一个Set,那么可以通过listKey和listValue指定。

(4)listKey和listValue:listKey即对应于select标签中的value, listValue即对应于select标签中的option。

(5)name属性:即是表单中select的名称。对应action中的属性

例子

<s:select headerValue="--Please select--" headerKey="" list="#bean.testList"
name="obj.userName" listKey="userName" listValue="userName" value="%{obj.userName.trim()}"/>



<!-- map集合前要加# -->
<s:checkboxlist list="#{1:'java',2:'css',3:'html',4:'struts2',5:'spring'}" label="喜欢的编程语言" name="boxs" value="{1,2}"></s:checkboxlist>


内容概要:本文详细介绍了一个基于Python的个性化商品在线购物平台的设计与实现,重点围绕个性化推荐系统展开。平台通过采集用户行为数据(如浏览、购买记录),结合机器学习算法(如协同过滤、内容推荐、矩阵分解及深度学习)构建用户画像,实现精准的商品推荐。项目涵盖数据采集与清洗、推荐算法优化、大数据实时处理、用户隐私保护以及系统可扩展性与稳定性等多个关键技术环节,并提出相应的解决方案,如使用Pandas/NumPy进行数据预处理,Spark进行分布式计算,微服务架构提升系统弹性等。平台旨在提升用户体验、增加销售额、优化数据分析能力、增强用户粘性与市场竞争力,同时推动电商领域的技术创新。; 适合人群:具备一定Python编程基础和数据分析能力,熟悉机器学习算法及Web开发的初、中级开发者或计算机专业学生,适合从事电商系统开发、推荐系统研究的相关技术人员; 使用场景及目标:①学习如何在实际项目中应用协同过滤、矩阵分解等推荐算法;②掌握从数据采集、清洗到建模推荐的全流程实现;③了解高并发、大数据场景下的系统架构设计方法;④构建可落地的个性化电商平台原型用于教学、科研或创业参考; 阅读建议:建议结合文中提到的模型描述与示例代码进行实践操作,重点关注推荐算法的选型与调优过程,同时注意系统安全性与用户隐私保护的设计细节,在真实环境中逐步迭代和完善功能。
【源码免费下载链接】:https://renmaiwang.cn/s/7h2xc SWT,全称为Standard Widget Toolkit,是Java编程中用于创建图形用户界面(GUI)的一种开源库,由Eclipse基金会维护。SWT设计的目标是提供一个更高效、更原生的GUI,与Java标准库中的Abstract Window Toolkit (AWT) 和Swing相比,SWT能够更好地利用操作系统提供的功能,从而实现更快的性能和更好的用户体验。标题“SWT32位和64位库”主要关注的是SWT库在不同处理器架构下的适配性。在计算机硬件领域,32位和64位系统分别对应不同的处理器架构,主要区别在于处理数据的能力和内存寻址范围。32位系统最多可以寻址4GB内存,而64位系统则支持更大内存,并且可以处理更大的数据量。对于SWT库来说,32位版本是为运行在32位操作系统的Java应用程序设计的,如Windows XP、Windows 7 32位版等。64位版本则是为64位操作系统如Windows 7、Windows 10 64位版准备的。两者不能混用,因为它们的内部结构和调用方式存在差异,64位库无法在32位环境中运行,反之亦然。SWT库的32位和64位版本在编译和运行时需要与JVM(Java虚拟机)的位数匹配。例如,如果你的JVM是32位的,那么你的SWT库也必须是32位;如果JVM是64位,SWT库就必须是64位。不匹配的情况下,程序将无法正常启动或运行,可能会出现错误提示。在实际开发中,开发者需要根据目标用户的系统环境来选择合适的SWT库。如果不确定用户的系统位数,可以提供两种版本的软件安装包,或者使用自动检测系统架构并加载相应库的技术。SWT库的子文件通常包含了各种操作系统平台的特定实现,因为SWT的目标是提供原生的外观和行为,所以它会利用操作系统提供的控件和API。
#### 标题解析 - **Ke2400S Measurement Software-V12.647-Installation Package.zip.zip** - 这个标题指向了一个安装包文件,通过文件扩展名“.zip.zip”可以看出这是一个已经压缩过的压缩包,它的内部可能包含了一个或多个文件或文件夹,这些文件和文件夹被进一步压缩以形成一个可以下载和分发的单一文件。标题中的“Ke2400S”可能指代软件名称或型号的一部分。而“V12.647”表明这是版本号为12.647的软件。 #### 描述解析 - **Keithley 2400系列数字源表Sourcemeter测试软件-V12.647.002** - 描述开始提到的“Keithley 2400系列”指的是美国吉时利仪器公司(Keithley Instruments, Inc.)生产的一系列精密测量设备,具体是2400型数字源表,它具备数字多用表和精密电源的功能,适用于多种测试环境。 - “数字源表Sourcemeter测试软件”是专为2400系列设备设计的软件工具,能够通过精确的电压源和电流源驱动设备,并能够对电流与电压进行精确测量。这在许多需要高精度测试的应用中十分关键,比如半导体器件的特性测试、组件的I-V(电流-电压)特性测试等。 - 版本号“V12.647.002”是该软件的更新版本,这意味着用户下载此软件可以获得最新的功能增强、错误修复以及可能的性能改进。 #### 标签解析 - **Keithley 吉时利 太阳电池测试 数字源表 Sourcemeter** - 标签中列出的“Keithley”和“吉时利”指的是同一家公司,表明软件与该公司的设备兼容。 - “太阳电池测试”意味着该软件或硬件适用于测试太阳电池(太阳能电池板),涉及到对太阳电池的I-V特性曲线、效率、最大功率
在本挑战中,我们主要关注的是“学生成绩影响因素分析”。这是一项常见的数据分析任务,旨在探索哪些变量可能对学生的考试成绩产生显著影响。我们有两个关键文件:`Students_Exam_Scores.csv` 和 `学生成绩影响因素分析.ipynb`。前者是一个CSV文件,通常包含学生的基本信息和他们的考试分数;后者是一个Jupyter Notebook文件,里面可能包含了数据清洗、探索性数据分析(EDA)、特征工程以及建模的过程。 `Students_Exam_Scores.csv` 数据集可能会包含以下列: 1. **学生ID** - 用于唯一标识每个学生的标识符。 2. **年龄** - 学生的年龄,可能会影响学习能力和注意力集中。 3. **性别** - 男性或女性,性别差异可能在某些学科上存在。 4. **年级** - 学生所在的学习阶段,初级、中级或高级。 5. **家庭背景** - 家庭经济状况和社会环境,可能影响教育资源的获取。 6. **出勤率** - 参加课程的频率,直接影响学习效果。 7. **兴趣** - 对学科的兴趣程度,可以影响学习投入度。 8. **教师质量** - 教师的教学能力,可能对学生的学习成果有显著影响。 9. **科目** - 学生所学的学科,不同的科目可能有不同的难度和评分标准。 10. **考试分数** - 最终的成绩,是我们要预测或解释的目标变量。 在`学生成绩影响因素分析.ipynb`中,我们可能会看到以下步骤: 1. **数据加载** - 使用pandas库的`read_csv()`函数读取CSV文件。 2. **数据预处理** - 检查缺失值、异常值和不一致的数据,可能需要进行填充、删除或转换。 3. **描述性统计** - 计算变量的均值、中位数、标准差等,了解数据的基本情况。 4. **相关性分析** - 使用`corr()`函数查找变量之间的关联,寻找潜在的影响因素。 5. **可视化** - 使用matplotlib或seaborn创建散点图、箱线图等,帮助理解数据分布和关系。 6. **特征工程** - 可能会创建新的特征,如平均出勤率或性别编码(例如,男性=0,女性=1)。 7. **模型选择** - 可能会尝试多种模型,如线性回归、决策树、随机森林或梯度提升机。 8. **训练与验证** - 划分训练集和测试集,使用训练集训练模型,测试集评估模型性能。 9. **模型调优** - 使用网格搜索或随机搜索调整模型参数,提高预测准确性。 10. **结果解释** - 分析特征重要性,解释模型如何根据输入变量预测学生成绩。 11. **模型评估** - 使用R&sup2;分数、均方误差(MSE)或根均方误差(RMSE)等指标评估模型性能。 通过这个挑战,参与者不仅能学习到如何进行实际的数据分析流程,还能了解如何在实际问题中应用统计和机器学习方法,从而发现影响学生成绩的关键因素,并为教育政策或教学实践提供有价值的见解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值