Struts中的标签库.docx

上传人:b****8 文档编号:9277224 上传时间:2023-02-04 格式:DOCX 页数:51 大小:259.28KB
下载 相关 举报
Struts中的标签库.docx_第1页
第1页 / 共51页
Struts中的标签库.docx_第2页
第2页 / 共51页
Struts中的标签库.docx_第3页
第3页 / 共51页
Struts中的标签库.docx_第4页
第4页 / 共51页
Struts中的标签库.docx_第5页
第5页 / 共51页
点击查看更多>>
下载资源
资源描述

Struts中的标签库.docx

《Struts中的标签库.docx》由会员分享,可在线阅读,更多相关《Struts中的标签库.docx(51页珍藏版)》请在冰豆网上搜索。

Struts中的标签库.docx

Struts中的标签库

Struts中的标签库

一、标签库概述

1、为什么要使用标签库

●Scriptlet脚本

Scriptlet脚本对于快而杂(fast-and-dirty)的编码来说是一种不错的选择,但scriptlet会用Java代码将各种类型的HTML混杂在一起,从而使得程序的调试和设计极其错综复杂。

同时scriptlet也不能重用,这常常导致开发者不得不在JSP页面之间进行复制-粘贴操作,进而导致同一段代码出现多个版本。

而且,scriptlet还加大了错误处理的难度,因为JSP没有提供干净利落的方式来报告脚本错误。

●表示层与业务业务层完全分离

在Struts中为了倡导表示层与业务业务层完全分离,提供了一系列的标签库以代表一些通用的功能。

2、在Struts中提供了如下几类的标签库

●Bean标记:

用来在JSP页中管理bean

●逻辑标记:

用来在JSP页中控制流程

●HTML标记:

用来生成HTML标记,在表单中显示数据,使用会话ID对URL进行编程

●模板标记:

使用动态模板构造普通格式的页

3、应用要点

对Struts的标签库的使用还是需要小心,不必完全使用Struts的标签库,个人感觉Struts这种替代Html语句的标签库有一种牵强附会,给使用者掌握带来难度。

使用者除熟悉html外,还必须理解Struts的对应标签库用法!

二、Struts中的HTML标签库

1、概述

(1)Struts中的HTML标签库

Struts中的HTML中的标签库能够完成标准的HTML标签相同的功能,在Struts中倡导使用HTML标签库的主要原因是,这些标签可以和Struts中的其它组件特别是ActionForm保持协调。

因为,Struts可以将表单中的各个成员域影射到ActionForm中的成员数据。

在Struts中的HTML标签库大致分为如下的几类:

●用于生成基本的HTML元素的标签

●用于生成HTML表单的标签

●显示错误或者正常消息的标签

(2)以下提供常见HTML标记和Struts相对比较表单:

HTMLTag

StrutsEquivalent

StrutsAddedBenefit

html>

html>

Addslocalesupportforinternationalization

img>

Addscapabilitytoloadfromalttextandimagefrommessageresourcesfile

base>

自动插入Web程序的URL地址

link>

link>

Allowsthelinktobeloadedfromtherequestorotherbean

(3)常见HTML表单输入项和Struts实例

常见HTML表单输入项和Struts实例

Function

HTMLTag

StrutsEquivalent

Textfield

   name = "myname"

   size = "20">

text  property = "myname"

    size = "20" />

Textarea

   type = "textarea"

   cols = "50"   rows = "4"

   name = "mytarea" >

textarea  property = "mytarea"

    cols = "50"

    rows = "4">

Radiobutton

   name = "rad1"

   value = "sel1">

radio  property = "rad1"

    value = "sel1">

Checkbox

   name = "chk1"

   value = " sel1">

checkbox  property = " chk1"

 value = "sel1">

SubmitButton

   value = "Submit"

   property = "Submit">

submitSubmit>

submit>

Resetbutton

reset/>

Selectionboxandoptions

   Item 1

select  property ="item">

option   value="i1">

   Item 1

option>

select>

2、用于生成基本的HTML元素的标签

(1)主要包括

html>和

base>

(2)

html>

它是HTML标签库中最容易的标签。

它有三个属性:

locale和xhtml和lang属性。

如:

htmllang=”true”>将被转化为

(3)

base>

标签显示一个HTML元素,用一个href属性表示所包含的JSP页面的绝对位置。

只有当这个标签是内嵌在一个head标签部分时,它才有效生成HTML的标签。

3、

link>创建超链接

(1)

link>的优点

生成HTML的标签,利用它来创建超链接有两个优点:

●允许在URL中以多种方式包含请求的参数;

●同时在用户关闭Cookie时,会采用URL重写把SessionID作为请求的参数包含在URL中,用于跟踪用户的Session状态。

●可以实现利用Action类来进行后端的业务组件的调度

(2)它有如下几个重要的属性

●forward:

指定全局转发的链接

首先在Struts的配置文件的中定义一个元素

然后在JSP页面中创建出

link>标签

linkforward="index">

LinktoGlobalActionForward

link>

●href:

指定完整的URL链接

linkhref="http:

//jakarta.apache.org/struts/index.html">

Generatean"href"directly

link>

●page:

指定相对于当前网页的URL链接

linkpage="/HtmlBasic.do">

Arelativelinkfromthispage

link>

(3)在

link>中的URL或者URI中包含单个请求的参数变量,而它的参数的值存储在当前的网页可访问的一个变量中

例一

<%

StringstringBean="ValuetoPassonURL";

%>

linkpage="/HtmlBasic.do"paramId="urlParamName"paramName="stringBean">

URLencodeaparameterbasedonastringbeanvalue

link>

例二

useBeanid="customerBean"scope="page"class="htmltaglibs.beans.CustomerBean"/>

setPropertyname="customerBean"property="name"value="weiqin"/>

linkpage="/HtmlBasic.do"paramId="urlParamName"paramName="customerBean"paramProperty="name">

URLencodeaparameterbasedonacustomerbeanvalue

link>

上面的意思是:

http:

//127.0.0.1:

8080/htmltaglibs/HtmlBasic.do?

urlParamName=weiqin

而名称为urlParamName的参数的值是由对象名称为customerBean的JavaBean中的名称为“name”的属性值。

(4)在

link>中的URL或者URI中包含多个请求的参数,此时应该将各个参数变量保存到一个Map类型的Java类中。

<%

java.util.HashMapmyMap=newjava.util.HashMap();

myMap.put("myString",newString("myStringValue"));

myMap.put("myArray",newString[]{"str1","str2","str3"});

pageContext.setAttribute("map",myMap);

%>

linkpage="/HtmlBasic.do"name="map">

根据Map中的参数对URL进行编码

link>

最后产生如下的效果:

http:

//127.0.0.1:

8080/htmltaglibs/HtmlBasic.do?

myArray=str1&myArray=str2&myArray=str3&myString=myStringValue。

请见下面的图示

例:

<%

java.util.HashMapqueryParamMap=newjava.util.HashMap();

queryParamMap.put("menuID","5");

queryParamMap.put("bookID",newInteger(bookID).toString());

queryParamMap.put("currentShowPage",newInteger(getShowGuideBarParamBeanID.getCurrentShowPage()).toString());

pageContext.setAttribute("queryParamMapName",queryParamMap);

%>

linkpage="/BuyBook/buyBookURI.do"name="queryParamMapName"styleClass="gray">购买

link>

将产生下面的超链接

menuID=5&currentShowPage=1&bookID=571"class="gray">购买

4、

img>

(1)作用

生成HTML的标签以实现在页面中内嵌图片

(2)最重要的属性

●page:

图象文件相对于模块的路径;前面必须带有一个斜线。

●height:

图象的高度。

●width:

图象的宽度。

●alt:

如果找不到图象,显示的文本。

(3)示例

例如:

imgpage="/logo.gif"height="50"width="200"alt="CompanyLogo"/>

会转换成:

5、基本的表单标签

(1)综述

所有可以在标记中使用的用来显示HTML输入控件的内嵌标记都使用下列属性来定义JavaScript事件处理器(注意其事件的名称与HTML中的JavaScript事件处理器名称的不同)。

属性

描述

onblur

字段失去了焦点

onchange

字段失去了焦点并且数值被更改了

onclick

字段被鼠标点击

ondblclick

字段被鼠标双击

onfocus

字段接收到输入焦点

onkeydown

字段拥有焦点并且有键按下

onkeypress

字段拥有焦点并且有键按下并释放

onkeyup

字段拥有焦点并且有键被释放

onmousedown

鼠标指针指向字段并且点击

onmousemove

鼠标指针指向字段并且在字段内移动

onmouseout

鼠标指针指向控件,但是指针在元素外围移动

onmouseover

鼠标指针没有指向字段,但是指针在元素内部移动

onmouseup

鼠标指针指向字段,并且释放了鼠标按键

如:

buttonproperty="register"value="注册"style="botton1"onclick="location='/UserManage/userregister.jsp'"/>

(2)

form>标记属性如下:

属性

描述

Action

与表单相关的操作。

在配置中,这个操作也用来标识与表单相关的ActionFormbean

Enctype

表单HTTP方法的编码类型

Focus

表单中需要初始化焦点的字段

Method

表单使用的HTTP方法

Name

与表单相关的ActionFormbean的名称。

如果没有设置这个属性,bean的名称将会从配置信息中获得

onreset

表单复位时的JavaScript事件句柄

onsubmit

表单提交时的JavaScript事件句柄

Scope

搜索ActionFormbean的范围。

如果没有设置,将从配置文件中获取

Style

使用的格式

styleClass

这个元素的格式表类

Type

ActionFormbean的完整名称。

如果没有设置,将从配置文件获得

(3)Form标签的使用要求

在该标签中必须包含一个action属性,它是这个标签中唯一必需的属性。

如果不具备该属性则JSP页面会抛出一个异常。

之后你必须给这个action属性指定一个有效值。

如果你有这样一个标签:

formaction="/login">,那么你的Struts配置文件的元素中必须有一个如下显示为粗体的元素:

input="/login.jsp">

(4)其它的应用

使用focus属性时你需要给它指定元素的名称。

比如,以下代码是定焦在第二个Text元素上的:

formaction="/login"focus="password">

UserName:

textproperty="userName"/>


Password:

textproperty="password"/>


submit/>

form>

(5)查看某一个标签的各个属性

只需要查看其对应的*.tld文件中的声明

6、

cancel>标签

(1)作用

利用它可以生成“取消”按钮,用户按下该按钮后将产生一个取消事件,这个事件由Action类来处理,但如何处理则由我们在execute()方法中编程实现。

(2)

cancel>标签所对应的HTML标签

cancel>Cancel

cancel>

将生成如下的HTML标签内容

(3)在Action类中处理“取消”按钮的事件---请见JBXStruts项目

publicActionForwardexecute(ActionMappingactionMapping,ActionFormactionForm,HttpServletRequesthttpServletRequest,HttpServletResponsehttpServletResponse)

{

if(this.isCancelled(httpServletRequest))

{

return(actionMapping.findForward("cancelDo"));

}

}

Action类中的isCancelled()方法用来判断取消事件有没有发生,如果这个方法的返回为true,就表示取消事件发生了,可以在程序中进行相关的操作。

7、标签

标签用于生成一个口令字(typepassword)的输入区域。

该标签中的一个很重要的属性是“redisplay”,它用于重新显示以前输入到这个区域中的值。

该属性的缺省值为true。

然而,为了使password不能被重新显示,你或许希望将该属性的值设为false。

例如:

passwordproperty="password"redisplay="false"/>

8、Checkbox和RadioButton按钮

(1)Checkbox按钮

checkboxproperty="checkbox1"/>对于Checkbox而言,由于其属性为true和false。

因此在ActionForm中的成员属性定义时应该定义为boolean类型。

(2)RadioButton按钮

radioproperty="radioVal"value="Value1"/>由于其返回的值为字符串(它必须包含“value”属性),因此在ActionForm中的成员属性定义时应该定义为String类型。

(3)ActionForm中的属性定义

privatebooleancheckbox1;

publicbooleangetCheckbox1()

{

returnthis.checkbox1;

}

publicvoidsetCheckbox1(booleancheckbox1)

{

this.checkbox1=checkbox1;

}

privateStringradioVal="";

publicStringgetRadioVal()

{

return(this.radioVal);

}

publicvoidsetRadioVal(StringradioVal)

{

this.radioVal=radioVal;

}

9、Multibox标签

(1)Multibox与checkbox的不同

它与

checkbox>一样,可以提供元素,其区别在于

multibox>标签可以生成一组复选框,代表一组概念中的各个项目并且可以实现多选。

比如

●对于checkbox而言,每个checkbox的属性名称都不一样

读书:

checkboxproperty="checkbox1"/>

运动:

checkboxproperty="checkbox2"/>

●对于

multibox>标签而言,每个checkbox的属性名称都一样

您的爱好:

multiboxproperty="intestring"value="读书"/>读书

multiboxproperty="intestring"value="运动"/>运动

multiboxproperty="intestring"value="艺术"/>艺术

(2)应用场合

如果应用中有多个Checkbox并且希望在ActionFormBean中用单个数组来表示它们,就可以采用

multibox>。

(3)在ActionForm中的属性定义

针对上面的

multibox>标签的ActionForm中的成员属性定义为一个数组(必须是数组这样才可以实现多选的效果),该数组的名称为标签中的成员属性名称。

privateString[]intestring;

publicString[]getIntestring()

{

returnintestring;

}

publicvoidsetIntestring(String[]intestring)

{

this.intestring=intestring;

}

当用户提交表单时,所有被选中的复选框的值都会被存放到ActionFormBean中的相应数组中。

如果某个复选框没有被选中,那么数组就不会包含它的值。

因此它可以动态地决定被选中的复选框的数目。

(3)显示出用户的选择项目

您的爱好为:

<%

String[]intestring=(String[])request.getAttribute("intestring");

for(intindex=0;index

{//考虑到有中文,应该进行转换编码格式

out.print(newString(intestring[index].getBytes("ISO-8859-1"),"GB2312")+"、");

}

%>

10、

select>和

option>、

options>

(1)作用

利用它可以创建出下拉列表(可以是单选或者多选),同时在

select>内可以包含多个

option>、

options>和

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1