- 浏览: 1589891 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
- 博客分类:
- Struts
---------------List-----------------
1.使用Strut2的的集合对象:在jsp初始化action中的list然后提交到action
2.使用Struts标签,实现多个用户同时注册(注意属性配置文件)
3.pojo
4.action
5.RegisterAction-conversion.properties(配置action中list的泛型对象,放在action同一目录下,属性文件的命名为:actionName-version.properties)
6.struts.xml
7.login.jsp 使用 struts2标签 和 OGNL 表达式
8.success.jsp 循环遍历 list 集合
9.访问
--localhost:8080/Struts2_CollectConversion/login.jsp
填上信息后提交就可以看到成功页面的循环的输出
10.使用 jstl c 标签 和 EL 表达式 实现上面的 批量注册 (注意 数组初始化)
long1.jsp
11.访问
--localhost:8080/Struts2_CollectConversion/login1.jsp
填上信息后和上面的一样。
---------------Set----------------
12.使用Strutgs2的 Set 类型. 遍历所有 和 取其中一个
action
13.RegisterSetAction-conversion.properties
14.login3.jsp (注意 初始化 set 的时候 采用 makeNew[] )
15.success2.jsp 遍历 Set 和获取 单个
16.访问
--http://localhost:8080/Struts2_CollectConversion/login3.jsp
填写信息后 就会到成功页面 看到遍历所有 和 取单个
---------------Map----------------
17.使用 Strut2的 Map 类型
action
18.属性配置文件 RegisterHashMapAction-conversion.properties
19.login5.jsp
20 .success3.jsp 遍历 Map 和 取 单个
21.访问
--http://localhost:8080/Struts2_CollectConversion/login5.jsp
填写信息就可以看到结果了
注意 action中 set 和hashmap 都要 初始化 和 有 get 和set 方法
1.使用Strut2的的集合对象:在jsp初始化action中的list然后提交到action
2.使用Struts标签,实现多个用户同时注册(注意属性配置文件)
3.pojo
package com.sh.pojo; import java.util.Date; public class Register { private String name; private String pwd; private int age; private Date birthday; private String address; //get set }
4.action
package com.sh.action; import java.util.ArrayList; import java.util.List; import com.opensymphony.xwork2.ActionSupport; import com.sh.pojo.Register; public class RegisterAction extends ActionSupport { private static final long serialVersionUID = 1L; private List<Register> registers; public List<Register> getRegisters() { return registers; } public void setRegisters(List<Register> registers) { this.registers = registers; } public String execute() throws Exception { return SUCCESS; } }
5.RegisterAction-conversion.properties(配置action中list的泛型对象,放在action同一目录下,属性文件的命名为:actionName-version.properties)
Element_registers=com.sh.pojo.Register //Element_是固定的后面接action中的list集合变量名,后面是泛型中的对象类。
6.struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!-- 定义国际化资源文件的基本名称 --> <constant name="struts.i18n.encoding" value="utf-8"/> <package name="default" extends="struts-default"> <!-- 使用list集合 --> <action name="registerAction" class="com.sh.action.RegisterAction"> <result name="success">/success.jsp</result> <result name="input">/login.jsp</result> </action> <!-- 使用Set集合 --> <action name="registerSetAction" class="com.sh.action.RegisterSetAction"> <result name="success">/success1.jsp</result> <result name="input">/login3.jsp</result> </action> <!-- 使用 HashMap --> <action name="registerHashMapAction" class="com.sh.action.RegisterHashMapAction"> <result name="success">/success3.jsp</result> <result name="input">/login3.jsp</result> </action> </package> </struts>
7.login.jsp 使用 struts2标签 和 OGNL 表达式
<body> <s:form action="registerAction" method="post" theme="simple"> <ul style="list-style:none; text-align: center;"> <li style="float: left;width: 155px">用户名</li> <li style="float: left;width: 155px">密码</li> <li style="float: left;width: 155px">年龄</li> <li style="float: left;width: 155px">生日</li> <li style="float: left;width: 155px">地址</li> </ul> <div style="clear: both;"></div> <!-- 手动声明一个 new int[4] 长度为4 的int 类型的数组--> <s:iterator value="new int[4]" status="st"> <ul style="list-style:none;"> <li style="float: left"> <s:textfield name="%{'registers['+#st.index+'].name'}" label="用户名"/> </li> <li style="float: left"> <s:password name="%{'registers['+#st.index+'].pwd'}" label="密码"/> </li> <li style="float: left"> <s:textfield name="%{'registers['+#st.index+'].age'}" label="年龄"/> </li> <li style="float: left"> <s:textfield name="%{'registers['+#st.index+'].birthday'}" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'});" label="生日"/> </li> <li> <s:textfield name="%{'registers['+#st.index+'].address'}" label="地址"/> </li> </ul> </s:iterator> <div><s:submit value="submit"/></div> </s:form> </body>
8.success.jsp 循环遍历 list 集合
<body> <ul style="list-style:none; text-align: center;"> <li style="float: left;width: 155px">用户名</li> <li style="float: left;width: 155px">密码</li> <li style="float: left;width: 155px">年龄</li> <li style="float: left;width: 155px">生日</li> <li style="float: left;width: 155px">地址</li> </ul> <div style="clear: both;"></div> <s:iterator value="registers" status="st"> <ul style="list-style:none;"> <li style="float: left;width: 155px;"> <s:property value="name"/> </li> <li style="float: left;width: 155px;"> <s:property value="pwd"/> </li> <li style="float: left;width: 155px;"> <s:property value="age"/> </li> <li style="float: left;width: 155px;"> <s:property value="birthday"/> </li> <li> <s:property value="address"/> </li> </ul> <div></div> </s:iterator> </body>
9.访问
--localhost:8080/Struts2_CollectConversion/login.jsp
填上信息后提交就可以看到成功页面的循环的输出
10.使用 jstl c 标签 和 EL 表达式 实现上面的 批量注册 (注意 数组初始化)
long1.jsp
<body> <form action="${pageContext.request.contextPath}/registerAction.action" method="post"> <ul style="list-style:none; text-align: center;"> <li style="float: left;width: 155px">用户名</li> <li style="float: left;width: 155px">密码</li> <li style="float: left;width: 155px">年龄</li> <li style="float: left;width: 155px">生日</li> <li style="float: left;width: 155px">地址</li> </ul> <div style="clear: both;"></div> <!--注意这里 声明的时候和上面的不一样 new int[4] c标签识别不出来 ,识别的只有一个元素--> <c:forEach items="new int[]{0,0,0,0}" varStatus="st"> <ul style="list-style:none;"> <li style="float: left"> <input name="registers[${st.index}].name"/> </li> <li style="float: left"> <input name="registers[${st.index}].pwd" /> </li> <li style="float: left"> <input name="registers[${st.index}].age"/> </li> <li style="float: left"> <input name="registers[${st.index}].birthday" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'});"/> </li> <li> <input name="registers[${st.index}].address" /> </li> </ul> </c:forEach> <div><input type="submit"/></div> </form> </body>
11.访问
--localhost:8080/Struts2_CollectConversion/login1.jsp
填上信息后和上面的一样。
---------------Set----------------
12.使用Strutgs2的 Set 类型. 遍历所有 和 取其中一个
action
package com.sh.action; import java.util.LinkedHashSet; import java.util.Set; import com.opensymphony.xwork2.ActionSupport; import com.sh.pojo.Register; public class RegisterSetAction extends ActionSupport { private Set<Register> registers=new LinkedHashSet<Register>(); public Set<Register> getRegisters() { return registers; } public void setRegisters(Set<Register> registers) { this.registers = registers; } @Override public String execute() throws Exception { // TODO Auto-generated method stub return SUCCESS; } }
13.RegisterSetAction-conversion.properties
KeyProperty_registers=name //KeyProperty 如果是取 单个 就需要这个 Element_registers=com.sh.pojo.Register
14.login3.jsp (注意 初始化 set 的时候 采用 makeNew[] )
<body> <s:form action="registerSetAction" method="post" theme="simple"> <ul style="list-style:none; text-align: center;"> <li style="float: left;width: 155px">用户名</li> <li style="float: left;width: 155px">密码</li> <li style="float: left;width: 155px">年龄</li> <li style="float: left;width: 155px">生日</li> <li style="float: left;width: 155px">地址</li> </ul> <div style="clear: both;"></div> <!-- 注意 使用了makeNew[] --> <s:iterator value="new int[4]" status="st"> <ul style="list-style:none;"> <li style="float: left"> <s:textfield name="%{'registers.makeNew['+#st.index+'].name'}" label="用户名"/> </li> <li style="float: left"> <s:password name="%{'registers.makeNew['+#st.index+'].pwd'}" label="密码"/> </li> <li style="float: left"> <s:textfield name="%{'registers.makeNew['+#st.index+'].age'}" label="年龄"/> </li> <li style="float: left"> <s:textfield name="%{'registers.makeNew['+#st.index+'].birthday'}" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'});" label="生日"/> </li> <li> <s:textfield name="%{'registers.makeNew['+#st.index+'].address'}" label="地址"/> </li> </ul> </s:iterator> <div><s:submit value="submit"/></div> </s:form> </body>
15.success2.jsp 遍历 Set 和获取 单个
<body> <ul style="list-style:none; text-align: center;"> <li style="float: left;width: 155px">用户名</li> <li style="float: left;width: 155px">密码</li> <li style="float: left;width: 155px">年龄</li> <li style="float: left;width: 155px">生日</li> <li style="float: left;width: 155px">地址</li> </ul> <div style="clear: both;"></div> <div>===========遍历所有的=========</div> <s:iterator value="registers" status="st"> <ul style="list-style:none;"> <li style="float: left;width: 155px;"> <s:property value="name"/> </li> <li style="float: left;width: 155px;"> <s:property value="pwd"/> </li> <li style="float: left;width: 155px;"> <s:property value="age"/> </li> <li style="float: left;width: 155px;"> <s:property value="birthday"/> </li> <li> <s:property value="address"/> </li> </ul> <div></div> </s:iterator> <div>===========单独去其中的一个(知道其中的key wei admin)========</div> <ul style="list-style:none;"> <li style="float: left;width: 155px;"> <s:property value="registers('admin').name"/> </li> <li style="float: left;width: 155px;"> <s:property value="registers('admin').pwd"/> </li> <li style="float: left;width: 155px;"> <s:property value="registers('admin').age"/> </li> <li style="float: left;width: 155px;"> <s:property value="registers('admin').birthday"/> </li> <li> <s:property value="registers('admin').address"/> </li> </ul> </body>
16.访问
--http://localhost:8080/Struts2_CollectConversion/login3.jsp
填写信息后 就会到成功页面 看到遍历所有 和 取单个
---------------Map----------------
17.使用 Strut2的 Map 类型
action
package com.sh.action; import java.util.HashMap; import java.util.Map; import com.opensymphony.xwork2.ActionSupport; import com.sh.pojo.Register; public class RegisterHashMapAction extends ActionSupport { private Map<String,Register> maps=new HashMap<String, Register>(); public Map<String, Register> getMaps() { return maps; } public void setMaps(Map<String, Register> maps) { this.maps = maps; } @Override public String execute() throws Exception { // TODO Auto-generated method stub return SUCCESS; } }
18.属性配置文件 RegisterHashMapAction-conversion.properties
Key_maps=java.lang.String // Key_ 固定 后面为action的Map属性名 Element_maps=com.sh.pojo.Register
19.login5.jsp
<body> <s:form action="registerHashMapAction" method="post" theme="simple"> <ul style="list-style:none; text-align: center;"> <li style="float: left;width: 155px">用户名</li> <li style="float: left;width: 155px">密码</li> <li style="float: left;width: 155px">年龄</li> <li style="float: left;width: 155px">生日</li> <li style="float: left;width: 155px">地址</li> </ul> <div style="clear: both;"></div> <!-- 注意 【key】 中key 的取值类型和 配置文件中一直--> <s:iterator value="new int[4]" status="st"> <ul style="list-style:none;"> <li style="float: left"> <s:textfield name="%{'maps['+#st.index+'].name'}" label="用户名"/> </li> <li style="float: left"> <s:password name="%{'maps['+#st.index+'].pwd'}" label="密码"/> </li> <li style="float: left"> <s:textfield name="%{'maps['+#st.index+'].age'}" label="年龄"/> </li> <li style="float: left"> <s:textfield name="%{'maps['+#st.index+'].birthday'}" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'});" label="生日"/> </li> <li> <s:textfield name="%{'maps['+#st.index+'].address'}" label="地址"/> </li> </ul> </s:iterator> <div><s:submit value="submit"/></div> </s:form> </body>
20 .success3.jsp 遍历 Map 和 取 单个
<body> <ul style="list-style:none; text-align: center;"> <li style="float: left;width: 155px">用户名</li> <li style="float: left;width: 155px">密码</li> <li style="float: left;width: 155px">年龄</li> <li style="float: left;width: 155px">生日</li> <li style="float: left;width: 155px">地址</li> </ul> <div style="clear: both;"></div> <div>===========遍历所有的=========</div> <s:iterator value="maps" status="st"> <ul style="list-style:none;"> <li style="float: left;width: 155px;"> <s:property value="value.name"/> </li> <li style="float: left;width: 155px;"> <s:property value="value.pwd"/> </li> <li style="float: left;width: 155px;"> <s:property value="value.age"/> </li> <li style="float: left;width: 155px;"> <s:property value="value.birthday"/> </li> <li> <s:property value="value.address"/> </li> </ul> <div></div> </s:iterator> <div>===========单独去其中的一个= (知道其中的key=0)========</div> <ul style="list-style:none;"> <li style="float: left;width: 155px;"> <s:property value="maps['0'].name"/> </li> <li style="float: left;width: 155px;"> <s:property value="maps['0'].pwd"/> </li> <li style="float: left;width: 155px;"> <s:property value="maps['0'].age"/> </li> <li style="float: left;width: 155px;"> <s:property value="maps['0'].birthday"/> </li> <li> <s:property value="maps['0'].address"/> </li> </ul> </body>
21.访问
--http://localhost:8080/Struts2_CollectConversion/login5.jsp
填写信息就可以看到结果了
注意 action中 set 和hashmap 都要 初始化 和 有 get 和set 方法
- Struts2_CollectConversion.zip (3.3 MB)
- 下载次数: 154
评论
5 楼
双子树
2016-05-17
东西太好啦受教啊
4 楼
一笑_奈何
2015-11-25
谢谢了,学习了。真心有用
3 楼
lonfiy
2014-01-07
正好要用到这个,学习了
2 楼
Glory_Nol
2013-11-26
lz 我想问下可以用 中文 作为 map 的 key 吗?
我试了下 <s:password name="%{maps['第一条数据'].pwd" label="密码"/>
好像不行呃。
如果可以?那应该怎么改?谢谢!
我试了下 <s:password name="%{maps['第一条数据'].pwd" label="密码"/>
好像不行呃。
如果可以?那应该怎么改?谢谢!
1 楼
maakey
2012-09-14
,分享不错,好东西,学习了
发表评论
-
解决getOutputStream() has already been called for this response
2014-07-30 19:16 3315java.lang.IllegalStateException ... -
Struts2 + ajaxFileUpload 异步上传文件
2013-12-04 19:33 1887ajaxFileUpload下载地址http://www.ph ... -
Struts2 Action 解析提交的XML
2013-10-16 12:30 1633package com.bjdata.bjsearch.p ... -
MyBatis+Spring+Struts2
2012-11-28 00:32 10612MyBatis3.1.1+Spring3.1.2+Struts ... -
Ibatis 整合spring + Struts2 加入OSCACHE
2012-11-14 00:10 4553说明: 使用 spring2.5 +ibatis2.3 ... -
Struts2中使用JfreeChart
2012-11-06 09:02 16371.jar commons-fileupload-1.2.2. ... -
Struts2整合SiteMesh
2012-11-05 10:33 76511.导入Struts2的jar 和 sitemesh.jar ... -
Struts2 编写安全策略(四十五)
2012-09-23 23:53 2291编写安全策略 包含(1 ... -
SSH2整合完整案例(四十三)
2012-09-14 09:34 20683注解配置:Struts2+Spring2.5+Hibernat ... -
Struts2 阻止表单重复 和 等待页面(四十四)
2012-09-23 21:13 2138表单重复提交现象 导 ... -
Struts2 文件上传,下载,删除(四十一)
2012-09-10 23:37 12325本文介绍了: 1.基于表单的文件上传 2.Struts 2 的 ... -
Struts2 文件上传,下载的类型(四十二)
2012-09-06 23:18 1994声明: 以下复制他人的!!! Struts2 文件上传 之 ... -
Struts2 常用标签使用(三十九)
2012-09-03 09:28 64251.append标签 使用append标签可以把多个集合对 ... -
Struts2 timer拦截器(三十二)
2012-08-31 02:17 20681.Strus2系统拦截器中,timer拦截器可以实现输出Ac ... -
Struts2 常用标签使用(三十九)
2012-09-03 00:50 51.append标签 使用append标签可以把多个集合对 ... -
Struts2 主题和模版设置(四十)
2012-09-03 20:24 4142----------------Struts2 主题----- ... -
Struts2 如何使用OGNL表达式(三十八)
2012-08-30 20:55 50751.OGNL是Object Graph Navitagtion ... -
Struts2 使用Validation框架验证数据(三十七)
2012-08-30 11:25 18461A:在Struts2的框架汇中,开发者可以通过继承Action ... -
Struts2 使用Validation框架验证数据(三十七)
2012-08-29 14:08 9A:在Struts2的框架汇中,开发者可以通过继承Action ... -
Struts2 iterator 标签遍历 Map,List,数组(三十六)
2012-08-26 18:30 205211.使用iterator 标签 遍历 数组,Map,List ...
相关推荐
在这个例子中,我们首先使用 `<s:set>` 标签将一个字符串 `"China"` 设置到了一个名为 `country` 的变量中,然后使用 `<s:if>` 标签进行条件判断。如果 `country` 的值等于 `"China"`,则会显示 `"This is China!"`...
在Struts2中,`iterator`标签是用于遍历集合数据的重要工具,它可以用来迭代Map、List和数组等数据结构,以便在视图层进行展示。本篇文章将深入探讨`iterator`标签在遍历这些数据类型时的具体用法。 首先,我们来看...
在Struts2框架中,`<s:iterator>`标签被广泛用于遍历集合或数组等数据结构。本文将深入探讨如何使用Struts2中的`<s:iterator>`标签来遍历二维数组,并通过实例代码来具体说明其用法。 ### Struts2 Iterator标签 ##...
<s:iterator value="list" id="book" status="u"> <tr> <td> <s:property value="id" /> </td> <td> <s:property value="name" /> </td> <td> ...
在action里面写了方法获取一个list,再将这个list的值放到jsp页面中显示出来,用的是<s:iterator>标签。
以上只是Struts2标签库的一部分,实际使用中还有更多标签如`<s:textfield>`(文本输入框)、`<s:textarea>`(文本区域)、`<s:submit>`(提交按钮)等,每个都有其特定的用途,极大地简化了JSP页面的编写。...
(2) <s:set> (3) <s:if> 、<s:elseif>、<s:else> (4) <s:iterator> (5) <s:include> (6) <s:form>、<s:hidden> (7) <s:textfield>、<s:password>、<s:checkbox>、<s:textarea> (8) <s:select>、<s:radio>、<s:...
在Struts2框架中,`<sx:>`标签是Struts2 XWork库的一部分,用于增强JSP页面的功能,提供更强大的数据绑定和表单处理能力。本篇将重点讲解如何利用`sx:`标签实现组合查询和带分页功能。 首先,让我们了解下Struts2的...
`<s:token>` 用于防止重复提交,`<s:tree>` 创建树形结构,`<s:treenode>` 定义树节点,`<s:updownselect>` 创建可上下选择的多选框,`<s:url>` 生成URL,通常与Action关联。 以上就是Struts标签的基本介绍,它们极...
* <s:append>:添加一个值到 list,类似于 list.add(); * <s:autocompleter>:自动完成 <s:combobox> 标签的内容,这个是 AJAX 实现的 B: * <s:bean>:类似于 Struts1.x 中的 JavaBean 的值 C: * <s:checkbox>...
2. <s:checkboxlist list=""></s:checkboxlist>-----多选框 3. <s:combobox list=""></s:combobox>-----下拉框 4. <s:component></s:component>-----图像符号 D: 1. <s:date/>-----获取日期格式 2. <s:...
在 Struts2 框架中,`s:iterator` 是一个非常重要的标签,它主要用于遍历集合数据(如数组、列表、映射表等),并且在 JSP 页面上显示这些数据。下面将根据提供的示例代码对 `s:iterator` 在不同场景下的使用进行...
`<s:radio>`,`<s:reset>`,`<s:select>`,`<s:set>`: `<s:radio>`创建单选按钮,常与列表结合使用。 `<s:reset>`标签用于创建重置按钮,清空表单数据。 `<s:select>`创建下拉选择框,与`<s:combobox>`类似。 `<s:...
在Struts2框架中,`<s:iterator>`标签是一个非常强大的工具,用于在JSP页面上循环遍历集合数据,如列表(List)、数组、Map等。它允许开发者以一种动态且灵活的方式展示来自后端的数据,从而极大地提高了开发效率和...
在Struts2框架中,`<s:iterator>`标签是一个非常强大的工具,用于遍历集合或数组中的元素,尤其在处理列表数据时极为有用。通过本文档提供的代码示例,我们将深入探讨`<s:iterator>`标签的使用方法及其与不同数据...
在Struts2中,不再像Struts1.x那样将标签库分为html、bean、logic和tiles等类别,而是统一使用一个`<s>`前缀的标签库,只需在JSP页面头部引入`<%@ taglib prefix="s" uri="/struts-tags" %>`即可使用所有标签。...
### Struts2 实现分页及 `<s:bean>` 标签详解 #### 一、Struts2 分页概述 在 Java Web 开发中,为了提高用户体验并减轻服务器负担,通常采用分页技术来展示数据。Struts2 框架提供了一套强大的工具和标签库来帮助...
在Struts2框架中,`<s:if>`标签被广泛应用于页面上根据不同的条件显示或隐藏某些元素。它的工作原理是基于表达式的结果来决定是否渲染其内部的HTML代码。当涉及到对String类型的对象属性值与单个字符进行比较时,...
通过以上这些方法,Struts2的`<s:iterator>`标签能够灵活地处理Map和List数据,大大简化了JSP页面的数据展示逻辑。了解并熟练运用这些特性,能提高开发效率,让代码更加简洁易读。在实际项目中,根据具体需求进行...