JSTL与Struts的结合(十)
来源:百度文库 编辑:神马文学网 时间:2024/04/28 13:42:50
分类:我的著作
标签库
Struts Logic标签库中的标签在页面显示时是时常被用到的,但是常用的却不一定是最好用的,有了JSTL标签库和EL表达式后,许多Struts Logic标签库的标签可以被简单替换。
1. 所有判断标签被EL表达式和标签替换
q 原形:判断标签有一个特点,就是需要取得一个实例的变量,因此通过标签来取得实例的变量是必须的,随后就通过各种判断标签来完成判断的工作。常用的判断标签如表9.30所示:
表9.30 常用判断标签
标签名
描述
empty
判断变量是否为空
notEmpty
与empty标签正好相反
equal
判断变量是否与指定的相同
notEqual
与equal标签正好相反
lessThan
判断变量是否比指定的小
greaterThan
判断变量是否比指定的大
lessEqual
判断变量是否小于等于指定的值
greaterEqual
判断变量是否大于等于指定的值
present
检查header、request parameter、cookie、JavaBean或JavaBean propertie不存在或等于null的时候,判断成功
notPresent
与present标签正好相反
match
比较String类型字符串是否与指定的相同
notMatch
与match标签正好相反
q 替换方案:利用EL表达式和标签来替换。
q 示例比较:判断标签的动作:
name="javaBeanParameter"
property="attack_event_code"
scope="request"/>
javaBeanParameter not empty
EL表达式和标签的动作:
id="attackSolution"
type="struts.sample.cap1.sample3.entity.AttackSolution">
标签EL表达式协作的动作:
${attackSolution.attack_event_code}
${attackSolution.attack_mean}
${attackSolution.attack_action}
两个动作都做的是同一件事,从request中得到保存的“allAttackSolution”参数,该参数为一个集合,集合中的对象为struts.sample.cap1.sample3.entity.AttackSolution类型的实例。
标签本身可以接收集合,保存为一个变量,利用迭代子模式,使标签体中的标签将集合中的每个JavaBean显示出来。
提示:在本例中由于要显示JavaBean中的变量属性,因此标签还需要设置property属性。
替换工作的标签则相对要方便些,items属性使用EL表达式取得集合,然后设置var属性作为集合中对象的变量,最后使用EL表达式来显示数据。
q 比较结果:
值得注意的一个地方是,标签必须为集合中的对象指定类型,因为标签库处理时会将集合中的对象作为Object类型得到,然后需要读取type属性定义的Java类为它强制转型。
而标签则完全不用,只要符合标准JavaBean(为变量属性提供get、set方法)的对象都可以通过EL表达式来从var属性定义的变量中取得该JavaBean的变量属性。
因此标签和EL表达式的方式更加简单,也更加灵活。
当然,熟悉标的程序设计者也可以将标签替换为EL表达式而仍然使用标签。代码可以是这样:
id="attackSolution"
type="struts.sample.cap1.sample3.entity.AttackSolution">
${attackSolution.attack_event_code}
${attackSolution.attack_mean}
${attackSolution.attack_action}
结果一样,但这种方式比标签显示方式灵活多了。
3.标签被和标签替换
q :标签用来转发到一个页面,并可以为转发传递参数。
q 替换方案:利用和标签的协作替换标签。
q 示例比较:标签的动作:
<%
HashMap paramMap = new HashMap();
paramMap.put("userName", "RW");
paramMap.put("passWord", "123456");
%>
和标签协作的动作:
两个动作都做的是同一件事,都将转发到当前Web Context下的“MyHtml.jsp”去,而且都将为它提供两个参数。最后的转发链接看起来应该如下所示:
http://localhost:8080/test/ MyHtml.jsp? userName=RW&password=123456
q 比较结果
一眼就可以看出,标签的不强,它的name属性表示的是一个Map类型的变量。如果还有property属性,则name属性指的是一个标准JavaBean。property属性指的是JavaBean中的一个Map类型的变量属性,通过Map的“名值对”来为转发页面传递参数。如果转发参数是来自于一个Map或JavaBean中的Map类型变量属性,那还好,因为可以在Java类中处理。可是如果纯粹是从页面上取得某些值作为转发参数,那就困难了,必须像本所给出的那样,自行定义一个Map。这种情况下,页面就会看到Java语言的片段,既麻烦又不符合标准。
而使用和标签协作,由于包含在标签体内的标签可以有多个,因此显式地提供标签就完成了给出转发参数的工作,即使用到JavaBean,也可以使用EL表达式来实现。
综上所述,利用和标签来代替标签是有必要的。
总结
Struts和JSTL并不是互相冲突的两种技术,虽然Struts框架提供了功能不错的标签库,但是使用JSTL可以简化Struts框架标签库复杂的地方,这对于服务器端表示层框架的Struts来说帮助很大。Struts的HTML标签库无法使用JSTL来替换,但是,使用EL表达式作为一些value属性,来做赋值的工作仍然不失为一种好的选择。因此,在JSTL已经比较成熟的今天,使用Struts框架和JSTL整合来作JSP将使程序设计更为轻松。
标签库
Struts Logic标签库中的标签在页面显示时是时常被用到的,但是常用的却不一定是最好用的,有了JSTL标签库和EL表达式后,许多Struts Logic标签库的标签可以被简单替换。
1. 所有判断标签被EL表达式和
q 原形:判断标签有一个特点,就是需要取得一个实例的变量,因此通过
表9.30 常用判断标签
标签名
描述
empty
判断变量是否为空
notEmpty
与empty标签正好相反
equal
判断变量是否与指定的相同
notEqual
与equal标签正好相反
lessThan
判断变量是否比指定的小
greaterThan
判断变量是否比指定的大
lessEqual
判断变量是否小于等于指定的值
greaterEqual
判断变量是否大于等于指定的值
present
检查header、request parameter、cookie、JavaBean或JavaBean propertie不存在或等于null的时候,判断成功
notPresent
与present标签正好相反
match
比较String类型字符串是否与指定的相同
notMatch
与match标签正好相反
q 替换方案:利用EL表达式和
q 示例比较:判断标签的动作:
property="attack_event_code"
scope="request"/>
javaBeanParameter not empty
EL表达式和
type="struts.sample.cap1.sample3.entity.AttackSolution">
${attackSolution.attack_event_code}
${attackSolution.attack_mean}
${attackSolution.attack_action}
两个动作都做的是同一件事,从request中得到保存的“allAttackSolution”参数,该参数为一个集合,集合中的对象为struts.sample.cap1.sample3.entity.AttackSolution类型的实例。
提示:在本例中由于要显示JavaBean中的变量属性,因此
替换工作的
q 比较结果:
值得注意的一个地方是,
而
因此
当然,熟悉
type="struts.sample.cap1.sample3.entity.AttackSolution">
${attackSolution.attack_event_code}
${attackSolution.attack_mean}
${attackSolution.attack_action}
结果一样,但这种方式比
3.
q :
q 替换方案:利用
q 示例比较:
<%
HashMap paramMap = new HashMap();
paramMap.put("userName", "RW");
paramMap.put("passWord", "123456");
%>
两个动作都做的是同一件事,都将转发到当前Web Context下的“MyHtml.jsp”去,而且都将为它提供两个参数。最后的转发链接看起来应该如下所示:
http://localhost:8080/test/ MyHtml.jsp? userName=RW&password=123456
q 比较结果
一眼就可以看出,
而使用
综上所述,利用
总结
Struts和JSTL并不是互相冲突的两种技术,虽然Struts框架提供了功能不错的标签库,但是使用JSTL可以简化Struts框架标签库复杂的地方,这对于服务器端表示层框架的Struts来说帮助很大。Struts的HTML标签库无法使用JSTL来替换,但是,使用EL表达式作为一些value属性,来做赋值的工作仍然不失为一种好的选择。因此,在JSTL已经比较成熟的今天,使用Struts框架和JSTL整合来作JSP将使程序设计更为轻松。
JSTL与Struts的结合(十)
JSTL与Struts的结合(一)
JSTL与Struts的结合(八)
JSTL与Struts的结合(九)
JSTL与Struts的结合(十一)
Struts和JSTL的结合
Struts-Menu结合角色权限的应用
JSF与JSTL的互操作问题
JSF与JSTL的互操作问题
与网络紧密结合,未来房产的十大趋势
JSF与Struts的异同
JSF与Struts的异同
社区与B2C的结合(续)
struts原理与实践(4)--jiter的博客
struts 原理与实践(5) --jiter的博客
struts原理与实践(6) --jiter的博客
JSTL标签的使用
JSTL
JSP与XML的结合
互联网与通讯的结合
JSP与XML的结合
杀戮与艺术的结合
Java视线论坛 :: 阅读主题 - 结合struts和hibernate谈J2EE架构的数据表示
Java视线论坛 :: 阅读主题 - 结合struts和hibernate谈J2EE架构的数据表示