关于Struts2中if标签的一些心得
来源:互联网 发布:天猫和淘宝的区别 编辑:程序博客网 时间:2024/05/21 18:39
最近在做Struts2+Hibernet的一个项目,在if标签的使用上出了些问题,纠结了好久,终于解决了。问题是这样的,在后台有一个brand变量,类型为Brand,该类有一个布尔型的属性Enabled,在后台Action中通过ActionContext.getContext().put("brand", brand);方法将brand传到前台,在JSP页面中要通过该Enabled的是否为真来显示一组单选框
在test的测试条件这里纠结了很久,怎么写都不行,后来查了许多资料,终于弄清楚了一些,最终的解决方案是 以下是我转自他人的一些资料
关于test的条件
test到底要写些什么,在test中关“# ” “%{ }”,“%{# }”的用法是怎样,查了很多资料,网上说,标签中用#可以取出堆栈上下文中的存放的对象.用%{}可以取出存在值堆栈中的Action对象,直接调用它的方法.例如你的Action如果继承了ActionSupport .那么在页面标签中,用%{getText('key')}的方式可以拿出国际化信息. 而对于“%{#}”,一些人说,用于域对象中,比如%{#session.user.userName},将获得user对象的 userName属性值。
虽然这个我还是不太明白,但是我必须要实现从session中取出对象来判断是否为空,而我在用户成功登录后,通过ActionContext.getContext().getSession().put("user",this.getUsername()),将用户名放入session的user对象中,现在的问题就是要判断user是否为空。
我用了很多写法如test="#session.user!=null",但一直返回的是false,后来在网上看到说把session改成attr,于是我写成了<s:if test="#attr.user!=null">,居然成功了,原理暂时还没搞清楚,不过已经实现了自己想要的效果。
不过好像用struts2的拦截器也可以实现,自己先写一个拦截器,判断session是否为空,然后利用struts.xml映射,返回的不同的字符串对应不同的页面。
这是从一位仁兄的博客上摘取的,我依样画葫芦,居然测试成功了!但是我还是想搞清楚为什么,后来在另一篇博客上看到好像是Servlet版本的问题,现摘抄一段如下:
看到这一差别才轰然醒悟过来,原来是在 Servlet 2.4 与 Servlet 2.3 的差别。Tomcat 5.0.28 是能支持 Servlet2.4/JSP 2.0 的,JSP 2.0 是可以用 EL 表达式,而之前版本是不行的,正式这一声明指示着容器应如何解析和编译 JSP 的,而产生未曾意料到的结果。
对于取pageContext、parameters、request、session、application 等处的属性值(假如有 name 属性)时我们用的 EL 表达式分别是:
${pageScope.name}、${param.name}、{$requestScope.name}、{$sessionScope.name}、{$applicationScope.name}
那么对应的 OGNL 的解决方案分别是:
<s:peroperty value="#attr.name"/>
<s:property value="#parameters.name"/>
<s:property value="#request.name"/>
<s:property value="#session.name"/>
<s:property value="#application.name"/>
<s:textfield name="name" value="%{#parameters.name}"/>
说明,attr 如果可以访问到,则访问 pageContext,否则将 依次搜索 pageContext、request、session、application 相应值,所以可用来访问 pageContext 中的值,可替代 EL 的 ${pageScope.name}。
更为详细的可以看看作者的原博客,写得相当不错http://www.blogjava.net/Unmi/archive/2008/04/13/192541.html
本来也考虑过在JSP页面中插入Java代码来做,但问题是通过ActionContext.getContext().put()方法设置的参数不知道如何在Java代码中读出来,这涉及到这个方法的参数传递问题了,将在我的另一篇博客中详细讨论。
- 关于Struts2中if标签的一些心得
- 关于Struts2中if标签的一些心得
- 关于struts2 if标签的一些使用方法
- struts2中if标签
- struts2 iterator中if标签的使用
- struts2中<s:if>标签的使用
- struts2中<s:if>标签的使用
- struts2 s:if标签中 #,%{},%{#}的使用方法
- struts2中<s:if>标签的使用
- struts2中<s:if>标签的使用
- struts2.0中if else标签的判断表达式
- struts2中iterator标签的嵌套使用(if/else)
- struts2中iterator标签的嵌套使用(if/else)
- struts2标签的if标签写法
- struts2中<s:doubleselect/>标签的使用心得<>
- 关于struts2中datetimepicker标签的使用
- struts2 中s:if 判断标签注意
- struts2中<s:if>标签
- Total Commander
- PE文件格式详解
- wince 英文系统显示汉字问题
- C# 委托
- 分辨率和像素的关系
- 关于Struts2中if标签的一些心得
- 动态创建View的方法,包括Button等等
- 测试人员容易遗漏一些隐藏的缺陷
- TI OMAP 3530 psp compile note(2)
- 几个学习ALV的SAP自带标准程序实例
- android Listview详解
- ERP标准物料编码规则指南
- [C# 4.0] 1. Dynamic (1)
- Choosing a Deployment Method of Visual C++ applications