Struts2 条件判断表达式解析:% # $ 的用法
本文将详细解释Struts2框架中`s:if`标签中`% # $`的区别和用法。 在Struts2框架的视图层,我们常常会使用`s:if`标签来进行条件判断,其中`%`, `#`, `$`是三种不同的引用方式,它们分别代表不同的含义: 1. `%`:在Java脚本中,`%`通常用于取模运算,但在Struts2的OGNL(Object-Graph Navigation Language)表达式中,`%`不具有特殊含义,它通常被用来开始一个脚本块。例如,`<s:if test="%{someExpression}">`,这里的`%{}`表示执行OGNL表达式。 2. `#`:在OGNL中,`#`字符用于访问Action上下文或者值栈中的对象。例如,`#session`代表访问HttpSession对象,`#parameters`用于获取请求参数。在示例中,`#session.user.username`就是尝试从session中获取名为`user`的属性,并进一步获取其`username`属性的值。如果`#session.user.username`的结果等于字符串`'c'`,则满足条件,可以进行相应的操作。 3. `$`:在Struts2中,`$`通常用来引用非OGNL表达式的变量。与`#`相比,`$`不涉及Action上下文或值栈,它只是简单地引用页面作用域中的变量。然而,在Struts2中,`$`的使用并不常见,因为它可能与JavaScript或其他脚本语言中的变量冲突,所以推荐使用`#`来避免混淆。 在示例代码中,可以看到各种使用`#session.user.username`的比较操作,如: - `#session.user.username=='c'`:检查`username`是否为`'c'` - `#session.user.username=='c'.toString()`:虽然`'c'`已经是字符串,但这里再次调用`toString()`,确保两边都是字符串类型进行比较 - `#session.user.username=='milo'`:同理,检查`username`是否为`'milo'` - `#session.user.username==0`:检查`username`是否为`0`,这里可能将其转换为了`int` - `#session.user.username==null`:检查`username`是否为空 - `#session.user.username!=null`:与上面相反,检查`username`是否不为空 此外,还涉及到其他对象和属性的判断,比如`activityBean.searchForce`和`systemSettingModel.settingValue`。这些变量也是通过`#`来访问的,它们可能是Action类中的属性。当`activityBean.searchForce`等于字符串`'N'`时,会执行相关的逻辑。类似地,`systemSettingModel.settingValue`的值如果是`'A'`,也会有特定的处理。 在Struts2的视图层,使用`s:iftest`属性结合OGNL表达式可以灵活地进行条件判断,这使得开发者可以根据不同条件控制页面的渲染。同时,`<s:property>`标签用于输出对象的属性值,如`<s:property value="systemSettingModel.settingValue"/>`,它将输出`systemSettingModel`对象的`settingValue`属性的值。 `%`, `#`, `$`在Struts2的`s:if`标签中的运用体现了OGNL的强大功能,它们帮助我们在视图层方便地处理条件判断和数据绑定,提高了开发效率。理解并熟练运用这些符号是Struts2开发中的重要技能。
1、判断单个字符:<s:if test="#session.user.username=='c'">
这样是从session中取出username的值,并且判断其是否为c,但是这样判断是不正确的,这样判断的话,根本判断不出来,要改成下面这样:
<s:if test="#session.user.username=='c'.toString()">
这样判断才能正确判断,至于原因我也不知道,在网上看到struts2中可能它判断的是char类型。
2、判断字符串:<s:if test="#session.user.username=='milo'">
这样写的就是判断username是不是milo,是String的判断,这个是不用加toString()的。
3、判断数值:<s:if test="#session.user.username==0">
这样写的就是判断username是不是0,是int的判断。
B:判断为空的问题:
<s:if test="#session.user.username==null">
struts2中的判空似乎只能这么写
判断非空可以这样写:
<s:if test="#session.user.username!=null" >
ps:如果从action中取属性值,test中的属性值前面的'#'不需要,action中的属性与jsp中的属性是互通的。
正确:
<s:if test='activityBean.searchForce=="N" '>
错误:
<s:if test="activityBean.searchForce=='N' ">
因为java是强类型语言,单引号表示char类型,只能赋给一个字符给char类型,
而双引号则表示String类型
所以我的activityBean.searchForce属性是String类型,那么N必须要用双引号
例如这个语句
要判断struts堆栈里systemSettingModel.settingValue 是否等于 "A"
写成
<s:if test="systemSettingModel.settingValue == 'A'">...</s:if>
是不对的。
这样A被认为是字符,而systemSettingModel.settingValue是单字符的字符串,不匹配
应写成
剩余7页未读,继续阅读
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展