Struts 2.0 其他特性

本文详细介绍了 Struts2.0 中的核心标签功能,包括 s:set 的使用方法及与 Struts1.x 的区别,s:property 的数据展示方式,s:date 的日期格式化功能,s:if 系列的条件判断用法,以及 s:iterator 的迭代展示特性。此外还介绍了 Struts2.0 的国际化处理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Struts 2.0算是学完了,自己也总结了很多的内容,包括和Struts 1.x的比较等等,但是我个人并不觉得Strts 2.0如何的难学,李老师讲的时候也跟我们说,会了Struts 2.0就相当于连webwork也学习会了,不知道为什么非要将这两个内容分开,听说webwork的配置要比Struts 2.0 多一点,也许随着发展就剩下struts 2.0了吧,呵呵

四、Struts2.0标签

注意OGNL表达式的配合使用

 

1、设置属性s:set

功能与Struts1.2bean:define相同

1)复制属性

  <%

    request.setAttribute("mldn","lin");

   %>

   <s:set name="temp" value="#request.mldn"></s:set>

   ${temp }

注意#

value中需要使用OGNL表达式来取得属性范围中的属性值,如果属性值保存在4种属性范围中,需要通过 #范围名称.属性 来取得,如果要取得该属性下的某一个属性值,可以继续使用 . ”的方式

 

2)新建属性

   <s:set name="temp1" value="'mumu'"></s:set>

   ${temp1 }

value中只能是基本数据类型:intString

 

s:set标签还有scope属性用来保存所设置或复制的属性的属性范围,如果不进行手工配置,默认保存在page范围内。

 

2、显示属性s:property

功能与bean:write类似,但不能格式化数据

     <%

        request.setAttribute("mldn","yan");

       %>

       <s:property value="#request.mldn" default="cly"/>

可以通过default设置该属性为null时的默认值,注意OGNL的使用

 

注意:当使用Struts2.0Action中的getter 方法传递数据时,可以不加入#属性范围

<%@ page language="java" pageEncoding="GBK"%>

<%@ taglib uri="/struts-tags" prefix="s" %>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <title>登陆成功页</title>

  </head>

 

  <body>

  <br>

  <a href="login!quit.action">退出登录</a>

    <center>

    <br>

    欢迎<s:property value="userid"/>登陆成功!

    

    </center>

  </body>

</html>

 

3、格式化显示日期s:date

bean:write中格式化日期的功能相同

<s:date name="user.birthday" format="yyyyMMdd"/>

 

4、判断标签s:if…s:elseif…s:else

           <s:if test="user == null">

              为空

           </s:if>

           <s:elseif test="user.userid == 'MLDN'">

              符合条件

           </s:elseif>

           <s:else>

              不符合条件

           </s:else>

test中如果要使用非getter方法设置的属性,也需要OGNL语法的支持,如果不加引号,表示使用属性,加入’’表示按照字符串处理,test中的返回值必须为boolean

 

5、迭代s:iterator

      1)集合(元素为对象)

循环数组或集合数据

           <s:iterator value="all">

              ${userid } -- ${age } -- ${birthday } <br>

           </s:iterator>

       在使用Struts2.0的迭代标签时,不需要使用id定义临时的属性,Struts2.0会将循环的pojo对象的所有属性保存在page范围内,可以直接通过属性名显示该属性(EL

 

2)集合(元素为基本数据类型)

       当集合中保存的属性并不是一个pojo对象,而是一个基本类型时(String

           <s:iterator value="all">

              <s:property/> <br>

           </s:iterator>

       这里可以使用s:property将集合中的内容直接显示出来。

 

3Map对象

       如果使用的为Map类型

           <!-- value表示要迭代的属性(OGNL -->

           <s:iterator value="all">

              ${key } -- ${value } <br>

           </s:iterator>

 

4)迭代索引

       如果要完成单双行变色,在Struts1.2中使用indexId进行处理,在struts2中可以通过status进行处理

       使用status可以通过以下属性取得数据:

       status.index,取得索引号:从0开始

       status.count:取得当前循环次数:从1开始

       status.odd:判断当前是否为单数行,如果是,则返回true,否则返回false

       status.even:判断是否为双数行

       status.first:判断是否为循环的第一行

       status.last:判断是否为循环的最后一行

           <!-- value表示要迭代的属性(OGNL -->

           <s:iterator value="all" status="status">        

              <font color="${status.odd?"red":"green" }">  ${key } -- ${value }</font> <br>

           </s:iterator>

 

五、Struts2.0国际化处理

Struts2.0中通过s:i18ns:text来完成国际化功能

注意:

1)一种语言得建立一个资源文件。

2)页面信息的资源文件可以建立在src下,命名为***_语言名称_区域名称.properties

文件名可以自行定义,但这几个不同语言版本的资源文件的名称必须一致

 

范例:单个页面的国际化处理

说明:每个页面的国际化处理,涉及到拦截器

修改项目:LinStrutsTwoDemo的首页,采用国际化处理

 

1、建立不同语言的资源文件

这里就叫“message_en_US.properties”和“message_zh _CN.properties”,在src

文件message_en_US.properties

msg.index.page.title=Index

msg.index.page.userid=UserID

msg.index.page.password=Password

msg.index.page.submit=Login

msg.index.page.reset=Reset

msg.index.page.selectLanguage=Please select language

msg.index.page.chinese=Chinese

msg.index.page.english=English

 

文件message_zh _CN.properties

msg.index.page.title=\u9996\u9875

基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人和运动设备中的六轴姿态传感器,它集成了三轴陀螺仪和三轴加速度计。这款传感器能够实时监测并提供设备的角速度和线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp`和`MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口和函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式和I2C地址,`getAcceleration()`和`getGyroscope()`则分别用于获取加速度和角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()`和`getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准和滤波,以消除噪声和漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)和角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置和动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度和角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力和更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程和数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客和其他开源资源是学习和解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息和实践指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值