Struts 1 之<html>标签库
<html:html>标签
<html:html>标签用于在网页开头生成HTML的<html>元素,它只有一个用于显示用户语言的lang属性: <html:html lang="true">
有时候由于tld文件的版本问题(新的版本将locale改为lang),导致在访问该页面时会报如下错误:
Unable to findsetter method for attribute: lang
即没有找到这个<html:html lang="true">标签的lang属性
解决方案:
将
<html:html lang="true" >改为
<html:html locale="true">或删除(依据情况)
<html:html locale="true"> <head><title>Welcome</title></head> <body>Hello World!</body> </html:html>生成
<html lang="en"> <head><title>Welcome</title></head> <body>Hello World!</body> </html>注意,<html:html locale=“true”>中的locale属性在生成的HTML页面中被转换成了lang=“en”。生成的结果取决于Struts应用程序所位于的服务器的locale。如果你将应用程序部署到一个不同locale的服务器,你不需要改变代码。Locale会自动调整
<html:base>标签
<html:base>标签在网页的<head>部分生成HTML<base>元素。HTML<base>元素用于生成当前网页的绝对URL路径。
如果在网页中使用了<html:base>标签,当该网页引用同一个应用的其他网页时,只需给出相对于当前网页的相对URL路径即可。
<html:link>和<html:rewrite>标签
<html:link>标签用于生成HTML <a> 元素。<html:link> 在创建超链接时,有两个优点:
(1) 允许在URL 中以多种方式包含请求参数。
(2) 当用户浏览器关闭Cookie时,会自动重写URL,把SessionID 作为请求参数包含在URL 中,用于跟踪用户的Session 状态。
<html:link>标签有以下重要属性:
(1) forward:指定全局转发链接。
(2) href:指定完整的URL 键接。
(3) page:指定相对于当前网页的URL。
<html:rewrite>用于输出超链接中的URI部分,但它并不生成HTML<a> 元素。URI指的是URL 中协议、主机和端口以后的内容。URI 用于指定具体的请求资源。例如,对于URL:HTTP://localhost:8080/HtmlBasic.do,它的URI为/HtmlBasic.do
html:rewriter避免了硬编码,即便是把web.xml中的action映射路径*.do改为其他的,用了这个标签可以自动生产正确路径这个是其他JSTL标签所做不到的,常用在form表单的action属性里,如
<form action="<html:rewriter action="/register"/>“ method="post">
示例:
1、创建全局转发链接
首先,在Struts-config.xml中<global-forwards> 元素中定义一个<forward>元素:
<global-forwards> <forward name = "index"path="/index.jsp"/> </global-forwards>接着,在JSP 文件中创建<html:link>标签:
<html:link forward="index"> Link to Global ActionForward </html:link><html:link> 标签的forward 属性和<global-forwards>元素中的<forward> 子元素匹配。以上代码生成如下HTML 内容:
<a href="/index.jsp">Linkto Global ActionFoward</a>值得注意的是,<html:link>的forward 属性只引用Struts-config.xml 配置文件中<global-forwards>内的<forward> 子元素,如果引用<action>内的<forward> 子元素,在运行时将会抛出异常:
Cannot create rewrite URL:Java.Net.MalfomedURlException: Cannot retrieve ActionForward
2、创建具有完整URL 的链接
如果Web 应用需要链接到其他站点,应该给出其他站点完整URL,例如:
<html:link href="http://jakarta.apache.org/struts/index.html"> Generate an "href" directly </html:link>生成HTML 代码如下:
<a href="http://jakarta.apache.org/struts/index.html">Generate an"href" directly</a>值得注意的是,如果指定了<html:link>标签的href 属性,即使用户浏览器的Cookie 关闭,<html:link> 标签也不会把用户SessionID 作为请求参数加和到URL 中。
3、从当前网页中创建相对URL
如果从一个网页链接到同一个应用中的另一网页,可以采用以下方式:
<html:link page="/HtmlBasic.do"> A relative link from this page </html:link><html:link> 标签的 page 属性用于指定相对于当前应用的URI。以上代码生成如下HTML 内容:
<a href="/lib/HtmlBasic.do">......</a>4、在URL 或 URI 中包含请求参数
如果要在URL或URI 中包含请求参数,只要把请求参数加在URL 或 URI的末尾就可以了。例如:
<html:link page="/HtmlBasic.do?prop1=abc&prop2=123"> Hard-code the url parameters </html:link> <!-- or --> <html:rewrite page="/HtmlBasic.do?prop1=abc&prop2=123"/>以上代码生成如下HTML 内容:(如果不带“/”,则不会附带上contextPath)
<a href=/lib/HtmlBasic.do?prop1=abc&prop2=123">......</a>rewrite: /HtmlBasic.do?prop1=abc&prop2=123
提示:在HTML 中& 代表特殊字符"&"
5、在URL 或 URI 中包含单个请求变量
如果要在URL 中包含一个请求参数,而这人参数的值存在于当前网页可访问的一个变量中,可以按以下方法来实现。
为了演示这一功能,首先创建一个当前网页可访问的变量。例如,本例中创建了两个变量,一个是字符类型,一个是CustomerBean ,它们存存于一个 page 范围内:
<% /* * Create a string object to store as abean in * the page content and embed in thislink */ String stringBean = "Value to Passont URL"; pageContext.setAttribute("stringBean", stringBean); %> <jsp:useBean id ="customerBean" scope="page"class="htmltaglibs.beans.CurstomerBean"/> <jsp:setProperty name="customerBean" property="name"value="weiqin"/>接着,把这两个变量作为请求参数,加入到URL或URI 中:
<html:link page="/HtmlBasic.do" paramId="urlParamName" paramName="stringBean"> URL encode a parameter based on astring bean value </html:link> <html:link page="/HtmlBasic.do" paramId="urlParamName" paramName="customerBean" paramProperty="name"> URL encode a parameter based on acustomer bean value </html:link> rewrite: <html:rewrite page="/HtmlBasic.do" paramId="urlParamName" paramName="stringBean"/> rewrite: <html:rewrite page="/HtmlBasic.do" paramId="urlParamName" paramName="customerBean" paramProperty="name"/><html:link> 标签的 paramId 属性指定请求参数名,paramName属性指定变量的名字。如果变量为JavaBean ,用paramProperty 属性指定JavaBean 的属性。
对于本例的stringBean,请求参数值为stringBean的字符串值。对于customerBean,指定了paramProperty 属性,请求参数值为customerBean 的 name 属性值。
以上代码生成如下HTML 内容:
<a href="/HtmlBasic.do?urlParamName=Value to Pass on Url"> Url encode a paramter based on a stringbean value </a> <a href="/HtmlBasic.do?urlParamName=weiqin"> url encode a parameter based on acustomer bean value </a> rewrite: /HtmlBasic.do?urlParamName=Value toPass on Url rewrite: /HtmlBasic.do?urlParamName=weiqin6、在URL 或 URI 中包含多个请求变量
如果在URL 或 URI 中包含多个请求参数,而这些参数的值来自多个变量,需要先定义一个Map类型的java 类,如java.util.HashMap,用它来存放请求变量。例如:
<% /* * Strore values int a Map(HashMap inthis case) * and construct the URL based on theMap * / java.util.HashMap myMap = newjava.util.HashMap(); myMap.put("myString", newString("myStringValue")); myMap.put("myArray" , newString[]{"str1","str2","str3"} ); pageContext.setAttribute("map", myMap); %>在以上代码的HaspMap 中存放了两个对象,其中第二个对象是个字符串数组。HashMap 被存放在PageContext 中。接下来就可以把这个HashMap 作为请求参数,加入到URL 或 URI 中:
<%-- For this version of the<html:link> tag: --%> <%-- map = a map with name/value pairs topass on the url --%> <html:link page="/HtmlBasic.do" name="map"> URL encode a parameter based on valuein a Map </html:link> <%-- Create the same rewrite string forthe above link. --%> rewrite:<html:rewrite page="/HtmlBasic.do" name="map"/><html:link> 标签的name 属性指定包含请求变量的HashMap对象。HashMap 对象中的每一对"key/value" 代表一对或多对"请求参数名/请求参数值"。以上代码生成如下的Html 内容:
<a href="/HtmlBasic.do?myString=myStringValue&myArray=str1&myArray=str2&myArray=str3"> URL encode a parameter based on valuein a Map </a> rewrite:/HtmlBasic.do?myString=myStringValue&myArray=str1&myArray=str2&myArray=str3<html:img>标签
生成基本的HTML<img>元素
<html:img page="/struts-power.gif"/>生成 html代码如下:
<img src="/htmltaglibs/struts-power.gif"><html:form>标签
<html:form action="FormBasic.do">生成html代码:
<form name="FormBasicAction" mothod="post"action="/htmltaglibs/FormBasic.do/">Struts将参照Struts配置文件来查找相应的Action组件,在struts-config.xml文件中,与"FormBasic.do"对应的代码为:
<action path="/FormBasic" type="htmltaglibs.actions.FormBasicAction" name="FormBacsicForm" scope="session" input="/FormBasic.jsp" validate="false"> <foreard name="success"path="/FormBasic.jsp"> </action><html:text>、<html:textarea>、<html:password>标签
在表单上创建HTML文本框字段。如下:
<html:text property="userName">因为指定了一个userName的属性名,它应该匹配ActionForm中的一个属性,所一在FormBasicForm 中也必须有uerName这个属性和相应的getter(),setter()方法。当表单提交时,struts框架会把userName字段的内容赋给form的userName属性。
<html:textarea>、<html:password>标签与之类似
<html:cancel>标签
<html:cancel>标签在表单中生成取消按钮,当用户按下取消按钮使,将产生一个取消事件,这个事件由Action类来捕获,至于如何处理这个事件,可以在Action类的execute()方法中编程来完成。
<html:submit>、<html:button>、<html:reset>标签
<html:submit>Submit</html:submit>其余类似
<html: hidden>标签
在表单上生成隐藏字段,存放用户不希望看到和不允许修改的信息:如下两种方式:
<html:hidden property="userName">生成Html:
<input type="hidden" name="userName"value="propValue"><html:checkbox>标签
<html:checkbox>标签在表单上生成标准的HTML检查框,例如ActionFormBean 中的某个属性只有两种可选值(如true和false),就可以在表单中用<html:checkbox>标签来表示。<html:checkbox>的使用方法为:
<html:checkbox property="ch1"/>生成HTML代码:
<input type="checkbox"name="cb1" value="true"><html:checkbox>有一个value属性,用来设置用户选中检查框时的值,value的默认值为true,可以用以下方式改变value属性:
<html:checkbox property="ch1" value="true"/>以上代码说明当用户选择了这个检查框,就把相应Bean中的ch1属性设置为true.
其实这样也会容易让人搞混,例如当value="false"时,如果用户没有选择这个检查框,就把Bean中对应的属性设置为true.
为了检查框能正常工作,必须在Bean的reset()方法中对其进行复位,当<html:checkbox>的 value属性为true时,必须在reset()方法中把对应的属性设置为false.当<html:checkbox>的 value属性为false时,必须在reset()方法中把对应的属性设置为true.
<html:multibox>标签
<html:multibox>标签和<html:checkbox>一样,可以提供html<inputtype="ch1">元素,区别在于<html:multibox>可以生成复选框,它和Form 的关联方式不一样。
如果应用中有多个CheckBox,并且希望在Form中用单个数组来表示它们,就可以采用<html:multibox>.<html:multibox>的使用方法如下:
1、在Form中定义一个数组,来存放所有的 CheckBox的值:
private String strArray[]=new String[0]; public String[] getStrArray(){return (this.strArray);} public void setStrArray(String strArray[]){this.strArray=strArray;}2、其次在表单中加入<html:multibox>元素,通过设置property="strArray"来把它和Form中的数组关联。
3、对于每个<html:multibox>元素,设置它的初始值,有以下两种方式:
<html:multibox property="strArray" value="Value1"/>或
<html:multibox property="strArray">Value2</html:multibox>当用户提交表单时,所有被选中的复选框的值都会被存放在Form中的相应数组中。如果某个复选框没有被选中,那么数组就不会包含它的值,例如,如果用户选择了上例的两个复选框,那么数组的内容为{"Value1","Value2"}.
<html:radio>标签
<html:radio>标签提供HTML<inputtype="radio">元素,表示单选按钮,多个<html:radio>标签可以成组使用,如下:
<html:radio property="r1"value="v1"/> <html:radio property="r1"value="v2"/>以上标签的property属性相同,而仅仅是value不同,它们都和Form中的V1属性对应,生成的HTML如下:
<input type="radio"name="r1" value="v1"> <input type="radio"name="r1" value="v2"><html:select>标签
<html:select>标签生成HTML<select>元素。它可以在表单上创建下拉列表或多选列表。在<html:select>标签中可以包含多个<html:option>,<html:options>和<html:optionCollection>标签。<html:select>标签的基本形式为:
<html:select property="name" multiple="true" size="6"> [one or more <html:option/>, <html:options/>, <html:optionsCollection/> tags] </html:select><html:select>标签有以下重要属性:
size属性:指每次在网页上显示的可选项的数目。
multiple属性:指定是否支持多项选择,如果设置为true,就表示多选列表,支持多项选择;否则表示下拉列表,只支持单项选择,默认为false.
property属性:与ActionFormBean中的对应属性对应,这个属性用来存放用户在列表上选中选项的值,在单选的情况下,Bean中的对应属性应该定义为简单类型(不能为数组)。在多项选择的情况下,Bean中的对应属性应该定义为数组类型,以便存放用户选择的多个选项。
value属性:select的默认选中属性。动态的多用EI表达式生成
例如:在 cust.jsp中的客户列表为下拉列表,颜色列表为多选列表:
<html:select property="custId" /> <html:select property="colors" multiple="true" size="6"/>对应的Bean为:
private int custId; private String colors[]; public String[] getColors() { return colors; } public void setColors(String[] colors) { this.colors = colors; } public int getCustId() { return custId; } public void setCustId(int custId) { this.custId = custId; }<html:option>标签
<html:option>标签生成HTML<option>元素,这个标签被嵌套在<html:select>标签中,代表列表的一个可选项,它的label有两个来源:
在<html:option>和</html:option>之间的文本内容。
由<html:option>标签的key,locale和bundle属性指定的ResourceBundle中的内容。
1、在<html:option>和</html:option>之间的文本内容
<html:option value="a.orange">Orange</html:option> <html:option value="a.purple">Purple</html:option>2、由<html:option>标签的key,locale和bundle属性指定的ResourceBundle中的内容
ApplicationResources.properties资源文件中存在如下键值对:a1=happySelect
标签中通过key关联到资源文件,指定要显示内容。
<html:option value="1" key="a1" /> 这样在页面上显示出happySelect
通过key,bundle同时指定要显示的内容
bundle与Struts配置文件中<message-resources>元素配置的ResourceBundle的资源文件key匹配
<message-resources parameter="com.struts.happy" key="happyhtml"/><html:option value="1" bundle="happyhtml" key="a1" />这样在页面上显示出happySelect
把列表的可选项的显示文本存放在ResourceBundle中,而不是直接在JSP文件中指定,有利于实现国际化。
<html:options>、<html:optionCollection>标签
<html:options>标签提供一组HTML<option>元素。在<html:select>中可以包含多个<html:options>元素,如下:
使用coolection属性指定存在某个范围中的集合来生成列表项,注意coolection属性指定的集合,该对象的每一个元素为一个Bean
例如有如下实体类
public class Users { private StringuserName; private StringuserValue; public Users(){} publicUsers(String userName,String userValue) { this.userName=userName; this.userValue=userValue; } public StringgetUserName() { return userName; } public void setUserName(StringuserName) { this.userName = userName; } public StringgetUserValue() { return userValue; } public voidsetUserValue(String userValue) { this.userValue = userValue; } }将实体类实例放入ArrayList列表然后放入reqeust范围内
Users u1=new Users("1","高中"); Users u2=new Users("2","本科"); Users u3=new Users("3","硕士"); Users u4=new Users("4","博士"); ArrayList array=new ArrayList(); array.add(u1); array.add(u2); array.add(u3); array.add(u4); request.setAttribute("xueli",array);使用
<html:options>标签生成可选项
<html:select property="xueli" multiple="true" size="3"> <html:options collection="xueli" property="userName" labelProperty="userValue"/> </html:select>等价于
<html:optionsCollection name="xueli" value="userName" label="userValue"/> </html:select>collection指定存放在request范围内的集合
property指定<html:option>实际值
labelProperty指定<html:option>显示到页面上的文本。
当使用property属性和labelProperty属性时,会根据属性指定的名称调用相应Bean中的getXXX方法来获得属性值。
生成HTML效果如下
<option value="1">高中</option> <option value="2">本科</option> <option value="3">硕士</option> <option value="4">博士</option>利用name属性指定存放在某个范围中的对象,并有property属性指定该对象的某个属性来生成列表项。
例如
Object[] obj=new Object[]{"高中","本科","硕士","博士"}; request.setAttribute("xueli",array);<html:options name="xueli"/>生成HTML效果如下:
<option value="高中">高中</option> <option value="本科">本科</option> <option value="硕士">硕士</option> <option value="博士">博士</option>如果
<html:options name="xueli" property="userName" labelProperty="userValue"/>将报如下异常
javax.servlet.jsp.JspException:No getter method available for property userName for bean under name xueli
<html:file>标签
<html:file property="file"/>
当然了在做的同时还要注意以下几点,否则就会出问题:
1.<html:file>标签必须嵌套在<html:form>标签中。
2.<html:from>标签的method属性必须设置为"POST".
3.<html:from>标签的编码类型enctype属性必须为"multipart/form-data".
4.<html:file>标签必须设置为property属性,这个属性和Bean中FormFile类型的属性对应。
Struts 1 之<html>标签库的更多相关文章
- Struts 1 之<bean>标签库
<bean:write>标签 <bean:write>能输出request.session.application.page四个域中能访问到的变量,与EL表达式不同的是,如果变 ...
- 【转】Struts1.x系列教程(6):Bean标签库
转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/0 ...
- Struts 有哪些常用标签库
Struts 有哪些常用标签库 1.html标签库 2.bean标签库 3.logic标签库
- 菜鸟学习Struts——bean标签库
一.Struts标签库. Struts实际上包含了4个标签库:bean,logic,html,tiles bean:用来在属性范围中定义或取得属性的,同时可以读取资源文件信息 logic:替代JSTL ...
- Struts 1 之<logic>标签库
1. logic:empty logic:empty标签是用来判断是否为空的.如果为空,该标签体中嵌入的内容就会被处理.该标签用于以下情况: 当Java对象为null时 当String对象为" ...
- Struts(22)标签库具体解释
要使用Struts2的标签,仅仅须要在JSP页面加入例如以下一行定义就可以: <%@ taglib prefix="s" uri="/struts-tags&quo ...
- jstl标签库基础教程及其使用代码
概述 在 JSP 页面中,使用标签库代替传统的 Java 片段语言来实现页面的显示逻辑已经不是新技术了,然而,由自定义标签很容易造成重复定义和非标准的实现.鉴于此,出现了 JSTL ( JSP Sta ...
- Struts、JSTL标签库的基本使用方法
一 使用Struts标签之前需要经过下面3个步骤的配置. 1.导入TLD文件. 2.在web.xml中注册标签库. 3.在页面中引入标签库. 下面详细介绍以上步骤. 1 导入TLD文件. TLD文件是 ...
- Struts 有哪些经常使用标签库
Struts 有哪些经常使用标签库 1.html标签库 2.bean标签库 3.logic标签库
随机推荐
- Mac终端开启代理
使用shadowsocks开启代理,只支持浏览器开启代理,其他软件是不能够开启代理的,因为这个问题,自己一直无法用本地终端 git clone 一些库,网上查找方法,总结如下: 步骤一:开启shado ...
- [JSOI 2008]星球大战starwar
Description 题库链接 给你一张 \(n\) 点, \(m\) 条边的无向图,每次摧毁一个点,问你剩下几个联通块. \(1\leq n\leq 2m,1\leq m\leq 200000\) ...
- [JSOI 2007]麻将
Description 题库链接 给你一副麻将,胡牌的条件是一对将和若干顺子和刻子组成.现在给你 \(m\) 张牌,牌共 \(n\) 种,问你听哪一张牌. \(1\leq n\leq 400,1\le ...
- [UOJ 282]长度测量鸡
Description
- 伊布(ib)
[问题描述]ib 被困在了一个美术馆里,她需要收集美术馆内的每种颜料才能获得逃出美术馆的钥匙美术馆由 n*m 的房间构成,每个房间里有一种颜料,解锁进入后就可以收集.有的房间不能解锁,如果解锁的话会直 ...
- 栅栏(fence)
[问题描述]小 v 家有一条栅栏,由 n 个木板顺序组成,第 i 个木板的高度是 Ai.现在小镇上流行在栅栏上画矩形,所以小 v 也要在自家的栅栏上画.若要在区间[x,x+k-1]这个区间画一个宽度为 ...
- PKUWC2018划水记
PKUWC2018划水记 Day -1 从福州出发去长沙,原本是预定Day0当天的航班,后来怕来不及提前到了今天. 由于最近长沙下雪,所以听说飞机取消了很多班次,所以早上起来的时候还特地看了一 ...
- BZOJ4079 [Wf2014]Pachinko
完整题面: 设f(i,j)表示路径经过(i,j)这个点的概率,列出方程消元. 但暴力消元的复杂度是$O((nm)^3)$,注意每一次消元只会影响前后m个方程,所以我们可以对于第i行,只存[i-m,i+ ...
- 求n的阶乘
import java.util.Scanner; public class J { public static void main(String args[]) { //注释:int n=6 ...
- 数据结构 单链表&顺序表
顺序表: 一般使用数组(C语言中的数组采用顺序存储方式.即连续地址存储)来描述. 优点:在于随机访问元素, 缺点:插入和和删除的时候,需要移动大量的元素. 链表: 优点:插入或删除元素时很方便,使用灵 ...