struts1 标签

    最近又开始看struts,感觉这些东西学一两遍远远不够,每多看一边,就理解的越透彻。现在来学习struts1的标签。struts1提供了一套标签,功能上类似html、jstl标签,但因为是与struts紧密结合的,所以项目中使用struts作为web层框架的话,使用struts的标签库会给我们带来很多方便。

①<html:link/>

    该标签的功能是在网页中生成超链接,即在网页中查看源代码时会看到<a href="">...</a>。那么既然是最终生成<a></a>标签,为什么还要使用<html:link/>标签呢?主要有以下几个优点:

1、使页面代码更优雅,减少代码修改;

普通超链接中需要带上项目名称及后缀,如/projectname/user.do,如果出于某种原因,链接的后缀需要改成.htm,那么就需要修改页面中的所有超链接,很麻烦。如果使用的是

<html:link/>标签,标签中有一个action属性,指定你在struts-config.xml中相应的action配置元素的path属性,比如,一个action配置为<action path="/registUI" forward="/WEB-INF/page/regist.jsp"/>,那么在页面的<html:link/>中的action属性配置为/registUI,即<html:link action="/registUI">注册</html:link>,则会自动生成<ahref="/struts1Test/registUI.do">注册</a>,超链接中会自动带上项目名和后缀,这样修改后缀就只需要在配置文件中修改了;

2、url重写功能

如果浏览器禁用cookie的话,就得使用url重写功能,<html:link/>会自动使用url重写功能,即在第一次访问页面时在生成的超链接后面跟上jsessionid的值,如<ahref="/struts1Test/registUI.do;jsessionid=7EB58F3EDAB7943DFBD308AE9E99BB8B">注册</a>

3、参数编码

<html:link/>标签会将连接后带的参数编码,即将参数转换成0-9,A-F格式的字符,提高安全性;

那么怎么在<html:link/>标签中附带参数呢?

标签中有许多属性,paramId="username"指定附带的参数的名称(key),即生成的连接中会出现这个:...?username=,可以使用request.getParameter("username")获取;

参数的值是通过属性paramName来指定的,该属性指定的是存储在web作用域中的某个变量的key,即从web作用域中取得paramName所对应的值作为参数的值;注意,在struts标签中获取web作用域中的值时不需要${}操作的;比如,在request作用域中存了一个值request.setAttribute("username","张三");那么<html:link/>标签为<html:link action="/registUI" paramId="username" paramName="username">注册一</html:link>,生成的普通标签为<ahref="/struts1Test/registUI.do?username=%E5%BC%A0%E4%B8%89">注册一</a>;有时存储在web作用域中的变量不是普通的字符串等,而是javabean,如user对象,对象中有name、age等属性,在超链接中附带的参数是这个javabean的某个属性的值,这时就需要使用paramProperty属性,指定javabean属性的名字(如age),此时paramName属性指定的则是该javabean在web作用域中对应的key;

那么如何在超链接中附带多个参数呢?那么就不能使用前面用到的paramId、paramName、paramProperty属性了,因为它们只能附带一个参数,而需要使用name和property,同样,name属性指定web作用域中某个属性的key,property指定属性的名称。

此外,<html:link/>标签中不仅有action属性(指向某个action的配置),还有href(指定连接的完整路径)、page(指定需要访问的页面的路径)。

struts1的其他很多标签都有类似的属性,可以举一反三。

下面介绍struts1的几个实用的标签:

①<logic:forward name="login"/>

一个项目一般会有“欢迎页面”,比如index.jsp,在浏览器地址栏路径端口号后跟上项目名后就会访问index.jsp,如果你不想跳转到index.jsp,但是又想在浏览器地址栏中只输入项目名就访问目标页面(不是index.jsp等“欢迎页面”),那么可以index.jsp页面使用<logic:forward name="login"/>,其中name属性指向一个全局forward,比如我想直接访问登陆页面,可以这样配置:在struts-config.xml中配置全局forward<global-forwards><forward name="login" path="/WEB-INF/page/login.jsp"></forward></global-forwards>,然后在index.jsp中使用<logic:forward name="login"/>标签;

②<html:rewrite>

该标签主要是生成连接的值。比如在页面中,经常用到的超链接中的路径、表单中的路径等,要考虑到项目名、后缀等问题,使用<html:rewrite>标签就能自动生成路径,如<form action="<html:rewrite action="/login"/>" method="post">,<html:rewrite>中的action属性对应一个在struts-config.xml中配置的action的path属性的值;该标签与<html:link/>标签的区别是<html:link/>会生成完整的超链接<a href="" ...>...</a>,而<html:rewrite action="/login"/>只生成路径,及href的值;

③<html:errors>、<html:message>

这两个标签是显示资源消息的,使用时需要在struts-config.xml中配置国际化资源文件。使用时需要在action中创建ActionMessage或ActionError,并将它们放入request作用域,在页面中使用标签<html:errors property="unamenull" bundle="mes"/>显示信息,其中proprerty属性的值为放入request作用域时的key,bundle的值为配置国际化资源文件时的key属性对应的值,即这两个标签的作用是从request作用域中找出相应的信息并显示;

④<bean:message>

该标签的作用是直接从国际化资源文件中找出相应的信息显示,<bean:message key="info.submit" bundle="mes"/>其中key属性指向资源文件中信息的key(‘=’左边的部分),bundle为配置国际化资源文件是的key属性对应的值。

struts1还有很多标签,留待以后慢慢补充!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值