7.3 创建页面链接的<html:link>标签
7.3.1 通过<html:link>标签链接到页面中的指定位置
这种功能在很多地方是很实用的,它可以通过单击超链接将浏览器的当前显示定位到事先被标记的位置。比如在一篇篇幅较长的文章结尾处设置该功能,就可以快速回到文章的开始或其他位置。
<html:link>标签的linkName属性指定一个标记名称,即锚点。如将一篇文章的标题进行如下标记(假设当前应用为Blog,当前页面为MyBlog.jsp)。
<html:link linkName="top">此处为文章标题的内容</html:link>
anchor属性指定要添加到当前链接中的锚点。如在一篇文章的结尾处编写如下 代码。
<html:link href="" anchor="top">回到顶部</html:link>
href属性值为"",指定了链接的目标页面为当前页面MyBlog.jsp,还可以链接到其他页面中指定的锚点处。上述代码会生成如下HTML元素。
<a href="#top">回到顶部</a>
单击“回到顶部”链接后生成如下请求。
http://localhost:8080/Blog/MyBlog.jsp#top
此时浏览器的当前显示就被定位到了文章的标题处。
7.3.2 使用<html:link>标签创建页面链接
使用<html:link>标签创建的超链接有以下4种方式。
(1)action属性指定匹配Struts配置文件中,<action>元素的path属性值的URI地址。
(2)forward属性指定匹配Struts配置文件中,<global-forwards>元素中定义的某个<forward>元素的name属性值的URI地址。
(3)href属性指定URL链接地址。
(4)page属性指定相对于当前应用的URI地址。
下面分别通过几个示例向大家讲解使用forward属性、href属性和page属性创建超链接的方法。
1.通过forward属性创建全局转发链接
<html:link>标签的forward属性,对应Struts配置文件中的<global-forwards>元素中的<forward>子元素的name属性值。如在Struts配置文件中进行如下配置。
<global-forwards >
<forward name="globalerror" path="/Errors.jsp" />
</global-forwards>
在JSP文件中使用<html:link>标签创建一个链接:
<html:link forward="globalerror">显示错误信息!</html:link>
上述代码会生成如下HTML元素(假设当前应用为Logon)。
<a href="/Logon/Errors.jsp">显示错误信息!</a>
说明:如果在Struts配置文件中<global-forwards>元素没有与<html:link>标签的forward属性值匹配的<forward>子元素,即使在某个<action>元素中有与之匹配的<forward>子元素,在运行时都会抛出异常。
2.通过href属性创建链接
当href属性值以“/”开头时,链接地址为:协议+主机+端口+href属性值;
当href属性值是一个完整的URL时,如http://www.xxx.net,链接地址为href属性值;
否则链接地址为当前地址+href属性值。
假设当前应用为Logon,其根目录存在link.jsp和welcome.jsp文件,其中link.jsp文件包含以下代码:
<html:link href="welcome.jsp">Welcome</html:link>
则上述代码生成的链接地址为“http://localhost:8080/Logon/welcome.jsp”。若将href属性值改为“/welcome.jsp”,则生成的链接地址为“http://localhost:8080/welcome.jsp”。
3.通过page属性创建链接
通过page属性创建相对于当前应用的链接地址。page属性值应以“/”开头,通过该属性创建的链接地址为:当前应用程序路径+page属性值。
假设当前应用为Logon,其根目录存在link.jsp和welcome.jsp文件,其中link.jsp文件包含以下代码:
<html:link page="/welcome.jsp">Welcome</html:link>
则上述代码生成的链接地址为“http://localhost:8080/Logon/welcom.jsp”。若将page属性值改为“welcome.jsp”,则生成的链接地址为“http://localhost:8080/Logonwelcome.jsp”。
7.3.3 使用<html:link>标签创建的链接传递参数
下面为两种不同的实现方法。
1.将参数直接写入链接地址中
该方法与利用HTML中<a>元素创建的链接进行传递参数的方法相同。如:
<html:link page="/welcome.jsp?username=yxq&userpwd=123">Welcome</html:link>
上述代码生成的HTML元素如下。
<a href="/Logon/welcome.jsp?username=yxq&userpwd=123">Welcome</a>
2.通过<html:link>标签中的属性传递参数
使用<html:link>中的属性传递参数分为两种情况。
(1)通过请求链接传递单个参数。如:
<html:link page="/welcome.jsp" paramId="username" paramName="someBean" paramProperty="propertyname" paramScope="session">Welcome</html:link>
上述代码实现的是将session范围中指定对象中的某个属性值赋予一个指定的参数,该参数会被写入链接地址中进行传递。
其中的paramId属性用来指定一个添加到当前请求中的一个参数名;paramName属性指定一个对象,该对象的值将作为paramId属性指定参数的值;当paramName属性指定的对象为JavaBean时,则通过paramProperty属性来指定该JavaBean中的某个属性,Struts会调用该属性的getter()方法来获取值,并将该值作为参数的值。paramScope属性指定了查找paramName属性指定对象的范围,如果忽略了该属性,将按照页面、request请求、session会话和应用程序的顺序查找,并返回第一个匹配的对象。
请看下面的两个例子(假设当前应用为Logon)。
例1:
某JSP文件中包含以下关键代码。
<%
String usersex="Man";
Session.setAttribute("mysex",usersex);
%>
将该变量作为参数通过链接进行传递。
<html:link page="/welcome.jsp" paramId="sex" paramName="mysex">显示性别!</html:link>
上述代码生成如下HTML元素。
<a href="/Logon/welcome.jsp?sex=Man">显示性别!</html:link>
例2:
假设userinfo为一个JavaBean实例对象,userinfo中存在username和userpwd两个属性,并且username="yxq",userpwd="123",将该JavaBean存入session范围中:session.setAttribute ("userBean",userinfo)。将userinfo中的username属性值作为参数通过链接进行传递。
<html:link page="/welcome.jsp" paramId="name" paramName="userinfo" paramProperty="username"/>显示用户名!</html:link>
上述代码生成如下HTML元素。
<a href="/Logon/welcome.jsp?name=yxq">显示用户名!</html:link>
(2)通过请求链接传递多个参数。
通过<html:link>标签传递多个参数时,需使用name属性来指定包含多个请求参数的Hashtable对象(或HashMap对象),Hashtable对象中的“关键字”与“值”分别代表请求中的“参数名称”与“参数值”。如:
<html:link page="/logon.do" name="userinfo" scope="session"/>登录</html:link>
其中name属性指定了一个Hashtable对象的引用名userinfo,在该Hashtable对象中存储了用户名和密码。实现代码如下。
<%
Hashtable logonuser=new Hashtable();
logonuser.put("username","yxq");
logonusr.put("userpwd","123");
session.setAttribute("userinfo",logonuser);
%>
scope属性指定了查找name属性指定对象的范围。如果忽略了该属性,将按照页面、request请求、session会话和应用程序上下文的顺序查找,并返回第一个匹配的对象。
上述的<html:link>标签会生成如下HTML元素(若当前应用程序名为office)。
<a href="/office/logon.do?username=yxq&userpwd=123">
说明:“&”字符实体代表特殊字符“&”。
<html:rewrite>标签可以输出一个由forward、href或page属性指定的URL,并且同样可以像<html:link>标签那样向URL中写入参数。但该标签并不为指定的URL创建一个HTML中的<a>元素,它可以应用到如下的代码中。
<head>
<title>rewrite标签的应用</title>
<link type="text/css" rel="stylesheet" href=<html:rewrite page="/css/style.css"/>>
</head>






