1、Struts中的标签库Struts中的标签库 一、标签库概述1、为什么要使用标签库 Scriptlet脚本Scriptlet脚本对于快而杂( fast-and-dirty)的编码来说是一种不错的选择,但scriptlet会用Java代码将各种类型的HTML混杂在一起,从而使得 程序的调试和设计极其错综复杂。同时scriptlet也不能重用,这常常导致开发者不得不在JSP页面之间进行复制-粘贴操作,进而导致同一段代码出现多个版本。而且,scriptlet还加大了错误处理的难度,因为JSP没有提供干净利落的方式来报告脚本错误。 表示层与业务业务层完全分离在Struts中为了倡导表示层与业务业务层完
2、全分离,提供了一系列的标签库以代表一些通用的功能。2、在Struts中提供了如下几类的标签库 Bean标记:用来在JSP页中管理bean 逻辑标记:用来在JSP页中控制流程 HTML标记:用来生成HTML标记,在表单中显示数据,使用会话ID对URL进行编程 模板标记:使用动态模板构造普通格式的页3、应用要点对Struts的标签库的使用还是需要小心,不必完全使用Struts的标签库,个人感觉Struts这种替代Html语句的标签库有一种牵强附会,给使用者掌握带来难度。使用者除熟悉html外,还必须理解Struts的对应标签库用法!二、Struts中的HTML标签库1、概述(1)Struts中的H
3、TML标签库 Struts中的HTML中的标签库能够完成标准的HTML标签相同的功能,在Struts中倡导使用HTML标签库的主要原因是,这些标签可以和Struts中的其它组件特别是ActionForm保持协调。因为,Struts可以将表单中的各个成员域影射到ActionForm中的成员数据。 在Struts中的HTML标签库大致分为如下的几类: 用于生成基本的HTML元素的标签 用于生成HTML表单的标签 显示错误或者正常消息的标签(2)以下提供常见HTML标记和Struts相对比较表单: HTML TagStruts EquivalentStruts Added Benefit Adds
4、locale support for internationalizationAdds capability to load from alt text and image from message resources file自动插入Web程序的URL地址 Allows the link to be loaded from the request or other bean(3)常见 HTML 表单输入项和 Struts 实例常见 HTML 表单输入项和 Struts 实例FunctionHTML TagStruts EquivalentText fieldText areaRadio bu
5、ttonCheck boxSubmit ButtonReset buttonSelection box and optionsItem1Item12、用于生成基本的HTML元素的标签(1)主要包括和(2)它是HTML标签库中最容易的标签。它有三个属性:locale和xhtml和lang属性。如:将被转化为 (3)标签显示一个HTML元素,用一个href属性表示所包含的JSP页面的绝对位置。只有当这个标签是内嵌在一个head标签部分时,它才有效生成HTML 的标签。 3、创建超链接(1)的优点生成HTML 的标签,利用它来创建超链接有两个优点: 允许在URL中以多种方式包含请求的参数; 同时在用
6、户关闭Cookie时,会采用URL重写把SessionID作为请求的参数包含在URL中,用于跟踪用户的Session状态。 可以实现利用Action类来进行后端的业务组件的调度(2)它有如下几个重要的属性 forward:指定全局转发的链接首先在Struts的配置文件的 中定义一个元素 然后在JSP页面中创建出标签 Link to Global ActionForward href:指定完整的URL链接 Generate an href directly page:指定相对于当前网页的URL链接 A relative link from this page (3)在中的URL或者URI中包含单
7、个请求的参数变量,而它的参数的值存储在当前的网页可访问的一个变量中例一 URL encode a parameter based on a string bean value例二 URL encode a parameter based on a customer bean value上面的意思是:http:/127.0.0.1:8080/htmltaglibs/HtmlBasic.do?urlParamName=weiqin 而名称为urlParamName的参数的值是由对象名称为customerBean的JavaBean中的名称为“name”的属性值。(4)在中的URL或者URI中包含多个
8、请求的参数,此时应该将各个参数变量保存到一个Map类型的Java类中。 根据Map中的参数对URL进行编码最后产生如下的效果:http:/127.0.0.1:8080/htmltaglibs/HtmlBasic.do?myArray=str1&myArray=str2&myArray=str3&myString=myStringValue。请见下面的图示例:购买将产生下面的超链接购买4、(1)作用生成HTML 的标签以实现在页面中内嵌图片(2)最重要的属性 page:图象文件相对于模块的路径;前面必须带有一个斜线。 height:图象的高度。 width:图象的宽度。 alt:如果找不到图象,
9、显示的文本。 (3)示例例如: 会转换成: 5、基本的表单标签(1)综述所有可以在标记中使用的用来显示HTML输入控件的内嵌标记都使用下列属性来定义JavaScript事件处理器(注意其事件的名称与HTML中的JavaScript事件处理器名称的不同)。属性描述onblur字段失去了焦点onchange字段失去了焦点并且数值被更改了onclick字段被鼠标点击ondblclick字段被鼠标双击onfocus字段接收到输入焦点onkeydown字段拥有焦点并且有键按下onkeypress字段拥有焦点并且有键按下并释放onkeyup字段拥有焦点并且有键被释放onmousedown鼠标指针指向字段并
10、且点击onmousemove鼠标指针指向字段并且在字段内移动onmouseout鼠标指针指向控件,但是指针在元素外围移动onmouseover鼠标指针没有指向字段,但是指针在元素内部移动onmouseup鼠标指针指向字段,并且释放了鼠标按键如:(2)标记属性如下:属性描述Action与表单相关的操作。在配置中,这个操作也用来标识与表单相关的ActionForm beanEnctype表单HTTP方法的编码类型Focus表单中需要初始化焦点的字段Method表单使用的HTTP方法Name与表单相关的ActionForm bean的名称。如果没有设置这个属性,bean的名称将会从配置信息中获得on
11、reset表单复位时的JavaScript事件句柄onsubmit表单提交时的JavaScript事件句柄Scope搜索ActionForm bean的范围。如果没有设置,将从配置文件中获取Style使用的格式styleClass这个元素的格式表类TypeActionForm bean的完整名称。如果没有设置,将从配置文件获得(3)Form标签的使用要求在该标签中必须包含一个action属性,它是这个标签中唯一必需的属性。如果不具备该属性则JSP页面会抛出一个异常。之后你必须给这个action属性指定一个有效值。如果你有这样一个标签:,那么你的Struts配置文件的元素中必须有一个如下显示为粗
12、体的元素: (4)其它的应用 使用focus属性时你需要给它指定元素的名称。比如,以下代码是定焦在第二个Text元素上的: User Name: Password: (5)查看某一个标签的各个属性 只需要查看其对应的*.tld文件中的声明 6、标签(1)作用 利用它可以生成“取消”按钮,用户按下该按钮后将产生一个取消事件,这个事件由Action 类来处理,但如何处理则由我们在execute()方法中编程实现。(2)标签所对应的HTML标签Cancel 将生成如下的HTML标签内容(3)在Action类中处理“取消”按钮的事件-请见JBXStruts项目public ActionForward
13、execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) if (this.isCancelled(httpServletRequest) return (actionMapping.findForward(cancelDo); Action类中的isCancelled()方法用来判断取消事件有没有发生,如果这个方法的返回为true,就表示取消事件发生了,可以在程序中进行相关
14、的操作。7、标签标签用于生成一个口令字(type password)的输入区域。该标签中的一个很重要的属性是“redisplay”,它用于重新显示以前输入到这个区域中的值。该属性的缺省值为true。然而,为了使password不能被重新显示,你或许希望将该属性的值设为false。例如: 8、Checkbox 和Radio Button 按钮(1)Checkbox按钮对于Checkbox而言,由于其属性为true和 false。因此在ActionForm中的成员属性定义时应该定义为boolean类型。(2)Radio Button按钮而由于其返回的值为字符串(它必须包含“value”属性),因此
15、在ActionForm中的成员属性定义时应该定义为String类型。(3)ActionForm中的属性定义private boolean checkbox1;public boolean getCheckbox1() return this.checkbox1; public void setCheckbox1(boolean checkbox1) this.checkbox1 = checkbox1; private String radioVal = ;public String getRadioVal() return (this.radioVal);public void setRad
16、ioVal(String radioVal) this.radioVal = radioVal; 9、Multibox标签(1)Multibox与checkbox的不同它与一样,可以提供元素,其区别在于标签可以生成一组复选框,代表一组概念中的各个项目并且可以实现多选。比如 对于checkbox而言,每个checkbox的属性名称都不一样读书:运动: 对于标签而言,每个checkbox的属性名称都一样您的爱好: 读书 运动 艺术(2)应用场合如果应用中有多个Checkbox并且希望在ActionForm Bean中用单个数组来表示它们,就可以采用。(3)在ActionForm中的属性定义针对上面
17、的标签的ActionForm中的成员属性定义为一个数组(必须是数组这样才可以实现多选的效果),该数组的名称为标签中的成员属性名称。 private String intestring; public String getIntestring() return intestring; public void setIntestring(String intestring) this.intestring = intestring; 当用户提交表单时,所有被选中的复选框的值都会被存放到ActionForm Bean中的相应数组中。如果某个复选框没有被选中,那么数组就不会包含它的值。因此它可以动态地决定被选中的复选框的数目。(3)显示出用户的选择项目 您的爱好为:% String intestring=(String )request.getAttribute(intestring); for(int index=0; index 10、 和、(1)作用利用它可以创建出下拉列表(可以是单选或者多选),同时在内可以包含多个、和html
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1