Struts2 subset标签与OGNL详解
"subset标签示例-struts2标签" 在Struts2框架中,`subset`标签是一个非常有用的特性,它可以让你根据特定条件筛选集合中的元素。这在处理复杂数据展示或者动态过滤列表时非常实用。下面我们将深入探讨如何使用`subset`标签以及其与`Decider`接口的关系。 `subset`属性允许我们指定一个`Decider`类,这个类需要实现`org.apache.struts2.util.SubsetIteratorFilter.Decider`接口。`Decider`接口定义了一个方法`public boolean decide(Object element) throws Exception`,当这个方法返回`true`时,表示元素应该被包含在筛选后的子集中。这为我们提供了自定义过滤逻辑的机会。 为了创建一个自定义的`Decider`,我们需要编写一个类,比如`MyDecider`,并在其中实现`decide`方法。在这个例子中,我们可以编写一个`MyDecider`类,其`decide`方法检查元素是否包含特定的子字符串(如"java")。如果元素满足条件,方法返回`true`,否则返回`false`。 在使用`subset`标签前,我们需要先通过`bean`标签实例化`MyDecider`对象,并将其添加到`OgnlContext`中。之后,我们可以在`subset`标签的`decider`属性中,通过OGNL表达式(如`#myDecider`)来引用这个实例。这样,当`subset`标签遍历集合时,它会使用`#myDecider`来决定哪些元素应该被包含。 OGNL(Object-Graph Navigation Language)是Struts2中用于数据绑定和表达式操作的强大工具。它提供了一种简洁且一致的语法,使得我们可以访问和操作对象的任意属性,调用方法,遍历对象图,甚至进行类型转换。比如,如果我们有一个名为`user1`的根对象,我们可以通过表达式`person.address[0].province`来获取`user1`的`person`属性中的第一个`address`的`province`属性。 在Web开发中,如JSP 2.0、Velocity或Jelly等模板语言,通常都包含类似的功能,但OGNL以其全面的功能和独立库的形式脱颖而出,使得开发者能够轻松地在自己的框架中集成。Struts2放弃了之前版本的EL,转而使用OGNL作为默认的数据绑定机制。相比于Struts1.x的FormBean,这种方式更加灵活,不再需要为每个页面单独创建FormBean,而是直接使用后端的对象。例如,如果`User`和`Person`是两个独立的类,而在注册界面需要填写这两者的信息,我们就可以分别用`user.person.xxx`和`user.xxx`来绑定界面元素,直接反映对象层的结构。 `subset`标签结合`Decider`接口在Struts2中提供了动态过滤列表的能力,而OGNL作为强大的表达式语言,简化了对象属性的访问和数据绑定过程,使得开发者能更高效地处理复杂的业务逻辑。
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![text/plain](https://img-home.csdnimg.cn/images/20210720083646.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/0f323c12010d4ce4ba0fbd811b4d989b_weixin_42191440.jpg!1)
- 粉丝: 43
- 资源: 2万+
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 解决Eclipse配置与导入Java工程常见问题
- 真空发生器:工作原理与抽吸性能分析
- 爱立信RBS6201开站流程详解
- 电脑开机声音解析:故障诊断指南
- JAVA实现贪吃蛇游戏
- 模糊神经网络实现与自学习能力探索
- PID型模糊神经网络控制器设计与学习算法
- 模糊神经网络在自适应PID控制器中的应用
- C++实现的学生成绩管理系统设计
- 802.1D STP 实现与优化:二层交换机中的生成树协议
- 解决Windows无法完成SD卡格式化的九种方法
- 软件测试方法:Beta与Alpha测试详解
- 软件测试周期详解:从需求分析到维护测试
- CMMI模型详解:软件企业能力提升的关键
- 移动Web开发框架选择:jQueryMobile、jQTouch、SenchaTouch对比
- Java程序设计试题与复习指南
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)