Struts 的标签库

Struts 提供了大量的标签库,用于完成表现层的输出。借助于Struts 的标签库,可避免在JSP 中嵌入大量的Java 脚本,从而提高代码的可读性。
Struts 主要提供了如下三个标签库。
• html: 用于生成HTML 的基本标签。
• bean: 用于完成程序国际化,输出Struts 的ActionForm 的属性值等。
• logic: 用于完成循环、选择等流程控制。
一、使用Struts 标签的基本配置
为了使用Sturts 标签,必须将struts-bean.tld 文件复制到WEB-INF 路径下,并在web.xml 文件中增加html 标签库的配置。
下面是增加了三个标签库配置的web.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Web 配置文件的根元素 -->
<web-app>
<!-- 配置ActionServlet -->
<servlet>
<servlet-name>action</servlet-name>
<!-- 配置Servlet 的实现类 -->
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
<!-- 将ActionServlet配置load-on-startup Servlet -->
<load-on-startup>2</load-on-startup>
</servlet>
<!-- 配置ActionServlet映射的URL -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- 配置Web 应用的首页 -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 配置html 标签库 -->
<taglib>
<!-- 配置html 标签库的URI -->
<taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
<!-- 指定html 标签库的物理位置 -->
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
<!-- 配置bean 标签库 -->
<taglib>
<!-- 配置bean 标签库的URI-->
<taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
<!-- 指定bean 标签库的物理位置 -->
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
<!-- 配置logic 标签库 -->
<taglib>
<!-- 配置logic 标签库的URI -->
<taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
<!-- 指定logic 标签库的物理位置 -->
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
</taglib>
</web-app>

因为每个页面都需要使用这三个标签,为避免在每个页面中重复使用taglib 标签,
可将三个标签的导入放在单独的文件中。
下面是taglib.jsp 文件的源代码:
<%@ taglib uri="/WEB-INF/struts-bean.tld"prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>

其他的JSP 页面只需使用incluede包含该页面,即可导入三个标签库,避免了重复使用taglib 标签。
二、使用html 标签库
Struts 为htrnl 的大部分标签提供了对应的htrnl 标签, htrnl 所支持的标签大致有如下。
• base: 表现成一个HTML 的<base>标签。
• button: 表现成一个按钮,该按钮默认没有任何动作。
• cancel: 表现成一个取消按钮。
• checkbox: 表现成一个Checkbox 的输入框。
• error: 用于输出数据校验的出错提示。
• file: 表现成一个文件浏览输入框。
• form: 表现成一个form 域。
• frame: 表现成一个HTML<frame>标签。
• hidde: 表现成一个隐藏域。
• html: 表现成HTML 的<html>标签。
• image: 表现成表单域的image 域。
• img: 表现成一个HTML 的img 标签。
• javascrit: 表现成JavaScript 的校验代码,这些校验代码根据ValidatorPlugIn 生成。
• link: 表现成HTML 的超级链接。
• messages: 用于输出Struts 的各种提示信息,包括校验提示。
• multibox: 表现成一个Checkbox 输入框。
• option: 表现成选择框的一个选项。
• password: 表现成一个密码输入框。
• radio: 表现成一个单选输入框。
• reset: 表现成一个重设按钮。
• rewrite: 表现成一个URL 。
• select: 表现成一个列表选择框。
• submit: 表现成一个提交按钮。
• text: 表现成一个单行文本输入框。
• textarea: 表现成一个多行文本框。
这些标签的使用类似于html的标签,因此比较简单。下面是对login.jsp 页面的改写,将原有的html标签改写成Struts 的html标签。
当然,此处还存在没有使用Struts 的验证框架。因此,还必须保留JavaScript 验证。
<%@ page language="java" contentType="text/html; charset=UTF-8"
errorPage=""%>
<!-- 导入Struts 的三个标签库 -->
<%@ include file="/WEB-INF/pages/include/taglibs.jsp"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- 使用国际化资源文件的key 输出标题 -->
<title><bean:message key="login" />
</title>
</head>
<script>
function check(form){
if (form.username.value==null || form.username.value=="" ){
<!-- 使用国际化资源文件的key 输出提示 -->
alert ( '<bean :message key= "noname" />' ) ;
return false;
}
else if(form.pass.value==null || form.pass.value=="" )
{
<!-- 使用国际化资源文件的key 输出提示 -->
alert('<bean:message key="nopass"/>');
return false;
}
//两者都已经输入
else
{
return true;
}
}
</script>
<body>
<font color="red"> <%
//用于输出出错提示,出错提示保存在request 的err 属性里。
if (request.getAttribute("err") != null) {
out.println(request.getAttribute("err"));
}
%> </font>
<!-- 下面是登录表单 -->
请输入用户名和密码:
<html:form action="login.do" onsubmit="return check(this);">
<bean:message key="username" />
<html:text property="username" />
<br>
<bean:message key="pass" />
<html:password property="pass" />
<br>
<html:submit>
<bean:message key="login" />
</html:submit>
<br>
</html:form>
</body>
</html>

该页面的显示效果与之前的JSP 显示效果并没有太多不同。可见,html标签主要用于生成基本的htm1标签。
三、使用bean 标签库
bean 标签库主要用于输出属性值、提示消息及定义请求参数等。下面是bean 标签库的常用标签。
• cookie: 将请求的cookie 的值定义成脚本可以访问的JavaBean 实例。
• define: 将某个bean 的属性值定义成脚本可以访问的变量。
• header: 将请求头的值定义成脚本可以访问的变量。
• include: 将某个JSP 资源完整定义成一个bean 实例。
• message: 用于输出国际化信息。
• page: 将page Context 中的特定项定义成一个bean 。
• parameter: 将请求参数定义成脚本可以访问的变量。
• resource: 加载Web 应用的资源,并将其变成JavaBean。
• struts: 用于将某个Struts 的内部配置成一个bean 。
• write: 用于输出某个bean 的属性值。
下面将详细讲解这些标签。
1. cookie 标签
cookie 标签用于将cookie 值定义成JavaBean,看下面页面的代码:
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<html>
<head>
<title>bean:cookie Tag 测试</title>
</head>
<body>
<div align="center">
<h1>
bean:cookie Tag 测试
</h1>
</div>
<p>
作用:获取当前的Cookie 信息,将其转化成一个bean 实例
<br>
显示我们当前的session 关联的cookie 属性:
</p>
<!-- 将JSESSIONID 的cookie 定义成id 为sess 的bean -->
<bean:cookie id=" sess" name=" JSESSIONID"
value=" JSESSIONID-IS-UNDEFINED" />
<table border="l">
<tr>
<th>
Property Name
</th>
<th>
Correct Value
</th>
<th>
Test Result
</th>
</tr>
<tr>
<td>
comment
</td>
<!-- 下面采用两种方式输出sess bean 的comment 属性 -->
<td>
<jsp:getProperty name="sess" property="comment" />
</td>
<td>
<bean:write name="sess" property="comment" />
 
</td>
</tr>
<tr>
<td>
domain
</td>
<!-- 下面采用两种方式输出sess bean 的domain 属性 -->
<td>
<jsp:getProperty name="sess" property="domain" />
</td>
<td>
<bean:write name="sess" property="domain" />
 
</td>
</tr>
<tr>
<td>
maxAge
</td>
<td>
<!-- 下面采用两种方式输出sess bean 的maxAge 属性-->
<jsp:getProperty name="sess" property="maxAge" />
</td>
<td>
<bean:write name="sess" property="maxAge" />
 
</td>
</tr>
<tr>
<td>
path
</td>
<!-- 下面采用两种方式输出sess bean 的path 属性-->
<td>
<jsp:getProperty name="sess" property="path" />
</td>
<td>
<bean:write name="sess" property="path" />
 
</td>
</tr>
<tr>
<td>
secure
</td>
<!-- 下面采用两种方式输出sess bean 的secure 属性-->
<td>
<jsp:getProperty name="sess" property="secure" />
</td>
<td>
<bean:write name="sess" property="secure" />
 
</td>
</tr>
<tr>
<td>
value
</td>
<!-- 下面采用两种方式输出sess bean 的value 属性-->
<td>
<jsp:getProperty name="sess" property="value" />
</td>
<td>
<bean:write name="sess" property="value" />
 
</td>
</tr>
<tr>
<td>
version
</td>
<!-- 下面采用两种方式输出sess bean 的version属性-->
<td>
<Jsp:getProperty name="sess" property="version" />
</td>
<td>
<bean:write name="sess" property="version" />
 
</td>
</tr>
</table>
</body>
</html>

2. define 标签
define 标签主要用于定义Java 脚本可以访问的变量。定义该变量时,变量的赋值非常灵活,可以直接为其指定特定值:也可以使用某个bean 的属性值定义变量;或者将某个范围的bean 转向另一个范围。例如,将pageContext下的bean 转换到Session 范围内。
看下面的页面代码:
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
bean:define标签用来定义一个页面变量
<p>
1.下面是定义的时候直接赋值的方式
<br>
如同采用String test1 = "测试属性" ; 一样
<br>
<bean:define id="test1" value="测试属性" />
<%=test1%>
<br>
<hr>
2. 下面是把一个变量的值赋给另一个变量的值
<br>
如同String test2 = test1;
<br>
<bean:define id="test2" name="test1" />
<%=test2%><br>
<hr>
<jsp:useBean id="bean1" scope="page" class="lee.LoginForm" />
<jsp:setProperty name="bean1" property="password" value="tiger" />
3 .下面将某个bean 的属性定义成一个页面变量
<br>
如同String test3 = bean1.getPassword();
<bean:define id="test3" name="bean1" property="password" />
<%=test3%><br>
<br>
<hr>
4. 下面将来自某个范围的bean 转到另一个范围
<br>
如同session.setAtrribute("bean2".bean1) ;
<bean:define id="bean2" Name="bean1" scope="page" toScope="session" />
<hr>
<br>
5.bean:write的作用:
<br>
=((LoginForm)session.getAttribute("bean2")) .getPassword()
<br>
<bean:write name="bean2" property="password" scope="session" />

在上面的页面文件中,出现了以下4 种情况。
(1)在使用bean 标签定义Java 脚本可以访问的变量时,可直接为变量赋值。用法如下:
<bean:define id="variableName" value="variableValue"/>将variableValue的值赋给varialeName 的变量。
(2) 将一个变量的值直接赋给另一个变量,用法如下:
<bean: define id= "variable1" name= "variable2" />: 将variable2 的值赋给variable1。
(3)将某个bean 的属性定义成页面可以访问的变量,用法如下:
<bean:define id="variableName" name="beanName" property="beanProperty"/>:
将beanName 的beanProperty属性的值,赋给variableName的变量。
(4) 将一个范围的bean 转换到另一个范围内,用法如下:<bean:define id= "bean1" name= "bean2" scope="scope1" toScope="scope2"/>: 将scope1 中的bean1 转到scope2 的bean2 。
在最后部分演示了bean:write 的作用----输出bean 的属性值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值