最近在做Struts2+Hibernet的一个项目,在if标签的使用上出了些问
题,纠结了好久,终于解决了。问题是这样的,在后台有一个brand变量,类型为Brand,该类有一个布尔型的属性Enabled,在后台Action
中通过ActionContext.getContext().put("brand",
brand);方法将brand传到前台,在JSP页面中要通过该Enabled的是否为真来显示一组单选框
<s:if test="brand.Enabled "><!-- Enabled为真 -->
<input type="radio" name="brandEnable" value="true" checked/>启用
<input type="radio" name="brandEnable" value="false" />不启用
</s:if>
<s:else><!-- 否则 -->
<input type="radio" name="brandEnable" value="true" />启用
<input type="radio" name="brandEnable" value="false" checked />不启用
</s:else>
在test的测试条件这里纠结了很久,怎么写都不行,后来查了许多资料,终于弄清楚了一些,最终的解决方案是
<s:if test="#attr.brand.=Enabled ">
以下是我转自他人的一些资料
关于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}。
分享到:
相关推荐
struts2标签库struts2标签库struts2标签库struts2标签库
struts2标签使用例子 struts2标签使用例子 struts2标签使用例子struts2标签使用例子
Struts2标签库Struts2标签库Struts2标签库Struts2标签库Struts2标签库Struts2标签库
主要介绍了struts2的标签的详细使用例子说明
通过struts2 自定义标签实例,可以用这个对项目中的实现自定义标签。从而减少代码。
STRUTS2学习文档.pdf 对Struts2的一些配置文件进行了详细的说明。 Struts2―表单验证validate(html)对validate的type属性校验类型以及param 做了详细的解释说明。 struts2和struts的比较 让你更清楚的知道struts2...
java Web开发,我们最常用的Struts2常用标签总结,帮助你Struts2常用标签有那些功能
Struts2中实现自定义标签很简单,主要分为3步: 1.创建taglib文件(.tld),编写标签声明。 2.编写自定义标签类。 3.在页面中使用标签。 下面以一个自定义的分页标签为例,进行说明。 其实,开发自定义标签并不...
Struts2自定义分页标签很详细了,新手可以少走弯路,节约时间 资源包括了后台如何操作。
struts2中iterator 标签的使用详解
Struts2常用标签详细介绍
关于struts2的常用标签的应用
一个struts2的用户管理实例,涉及增删改查。 主要用到的技术: 1.struts2 2.国际化 3.类型转换 4.struts标签
struts1标签struts1标签struts1标签struts1标签struts1标签struts1标签struts1标签struts1标签struts1标签struts1标签struts1标签struts1标签struts1标签struts1标签struts1标签struts1标签struts1标签
03Struts2常用标签&DispatchAction.rar03Struts2常用标签&DispatchAction.rar03Struts2常用标签&DispatchAction.rar03Struts2常用标签&DispatchAction.rar
struts标签 • Bean Tags:该标签库包含的标签可以用来创建bean、访问bean和访问bean的属性。同时提供了依据cookies、headers和parameters的值创建相关bean的能力。 HTML Tags:该标签库包含的标签可以用来创建...
struts 2 s标签 a标签创建一个HTML超链接,等价于HTML 的 示范代码: 登陆</s:a>
JSP_struts2标签大全
struts标签库struts标签库struts标签库struts标签库struts标签库struts标签库struts标签库struts标签库
基于struts2的自定义分页标签实现的一个demo,连接数据库为Oracle