我们知道JSP中可以使用Tag文件使得处理和显示相分离,一般我们都将数据的处理交给Tag文件来完成。那么,为了完成数据的处理,则必须将数据传给Tag文件,是通过什么方法传递数据的呢?下面,我们就来讨论一下attribute指令。
在Tag文件中通过使用attribute指令,可以让使用它的JSP页面向该Tag文件传递需要的数据。使用格式如下:
<%@ attribute
name="对象名字" required="true|false"
type="对象的数据类型"%>
name属性是必须的,指定对象传递的一个引用;required属性是可选的,默认是false;type属性是可选的,默认是java.lang.String类型。
下面写一段代码,实现通过调用Tag文件计算三角形的面积。
compute.jsp:
<%@ page
contentType="text/html;charset=GB2312"%>
<%@ taglib tagdir="/WEB-INF/tags"
prefix="compute"%>
<html>
<head><title>计算三角形的面积</title></head>
<body>
<h2>请输入三角形的三边长:</h2>
<form action="compute.jsp" method="post"
name="form">
边A:<input type="text" name="side1"
/><br>
边B:<input type="text" name="side2"
/><br>
边C:<input type="text" name="side3"
/><br>
<input type="submit" name="enter"
value="Enter"/>
</form>
<%
String side_A = request.getParameter("side1");
String side_B = request.getParameter("side2");
String side_C = request.getParameter("side3");
if(side_A==null||side_B==null||side_C==null){
side_A = "0";
side_B = "0";
side_C = "0";
}
%>
<compute:Triangle sideA="<%= side_A
%>" sideB="<%= side_B
%>" sideC="<%= side_C
%>"/>
</body>
</html>
Triangle.tag(放在/WEB-INF/tags目录下):
<H4>这是一个Tag文件,负责计算三角形的面积。</H4>
<%@ attribute name="sideA"
required="true"%>
<%@ attribute name="sideB"
required="true"%>
<%@ attribute name="sideC"
required="true"%>
<%!
public String getArea(double a,double b,double c){
if(a+b>c&&a+c>b&&b+c>a){
double p = (a+b+c)/2.0;
double area = Math.sqrt(p*(p-a)*(p-b)*(p-c));
return "<br>三角形的面积:"+area;
}else{
return
("<br>"+a+","+b+","+c+"不能构成一个三角形,无法计算面积!");
}
}
%>
<%
out.println("<br>JSP页面传来三条边:"+sideA+","+sideB+","+sideC);
try{
double a = Double.parseDouble(sideA);
double b = Double.parseDouble(sideB);
double c = Double.parseDouble(sideC);
out.println(getArea(a,b,c));
}
catch(Exception e){
out.println("发生异常"+e);
}
%>
http://s6/mw690/bfed8f8agx6CzMudZNH35&690
注:<compute:Triangle
.../>标红的之间千万别有空格,我因为粗心加了个空格,写成:<compute: Triangle
.../>硬是浪费了一个多小时啊!!!