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=weiqin
6、在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标签库
随机推荐
- [HNOI 2014]世界树
Description 题库链接 给出一棵 \(n\) 个节点的树, \(q\) 次询问,每次给出 \(k\) 个关键点.树上所有的点会被最靠近的关键点管辖,若距离相等则选编号最小的那个.求每个关键点 ...
- [USACO 08JAN]Haybale Guessing
Description The cows, who always have an inferiority complex about their intelligence, have a new gu ...
- BZOJ4894 天赋
Description 小明有许多潜在的天赋,他希望学习这些天赋来变得更强.正如许多游戏中一样,小明也有n种潜在的天赋,但有 一些天赋必须是要有前置天赋才能够学习得到的.也就是说,有一些天赋必须是要在 ...
- [USACO13OPEN]重力异常
题目描述 船长正在拯救她的船员,Beefalo 博士. 和所有伟大的冒险故事一样,这个故事也是发生在一个2D平面上的.囧 这个平面是M*N的格子组成的网格,代表着船长的世界的一个侧视图. 有些格子是空 ...
- UVALive - 3530:Martian Mining
dp 可以发现,对于(i,j),要么把它运上去,那么把它运到左边,枚举一下即可 #include<cstdio> #include<cstdlib> #include<a ...
- 51Nod 1331 狭窄的通道
有一个长为L的狭窄通道,我们假设这个通道在x轴上,其两个出口分别在x=0与x=L处.在这个通道里有N只狼,第i只狼有一个初始位置ai,它想到达位置bi(0<=i=L处空间足够大可以装下任意数量的 ...
- poj 2104 主席树(区间第k大)
K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 44940 Accepted: 14946 Ca ...
- hdu 5583 Kingdom of Black and White
Kingdom of Black and White Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Ja ...
- [3.19FJ四校联考]
来自FallDream的博客.未经允许,请勿转载,谢谢. ---------------------------------------------------- A.积分,不会 以后补 B.给定一 ...
- Java面试题—初级(8)
基本表结构: student(sno,sname,sage,ssex)学生表 course(cno,cname,tno) 课程表 sc(sno,cno,score) 成绩 ...