<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&amp;prop2=123

提示:在HTML 中&amp 代表特殊字符"&"

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>标签库的更多相关文章

  1. Struts 1 之<bean>标签库

    <bean:write>标签 <bean:write>能输出request.session.application.page四个域中能访问到的变量,与EL表达式不同的是,如果变 ...

  2. 【转】Struts1.x系列教程(6):Bean标签库

    转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/0 ...

  3. Struts 有哪些常用标签库

    Struts 有哪些常用标签库 1.html标签库 2.bean标签库 3.logic标签库

  4. 菜鸟学习Struts——bean标签库

    一.Struts标签库. Struts实际上包含了4个标签库:bean,logic,html,tiles bean:用来在属性范围中定义或取得属性的,同时可以读取资源文件信息 logic:替代JSTL ...

  5. Struts 1 之<logic>标签库

    1. logic:empty logic:empty标签是用来判断是否为空的.如果为空,该标签体中嵌入的内容就会被处理.该标签用于以下情况: 当Java对象为null时 当String对象为" ...

  6. Struts(22)标签库具体解释

    要使用Struts2的标签,仅仅须要在JSP页面加入例如以下一行定义就可以: <%@ taglib prefix="s" uri="/struts-tags&quo ...

  7. jstl标签库基础教程及其使用代码

    概述 在 JSP 页面中,使用标签库代替传统的 Java 片段语言来实现页面的显示逻辑已经不是新技术了,然而,由自定义标签很容易造成重复定义和非标准的实现.鉴于此,出现了 JSTL ( JSP Sta ...

  8. Struts、JSTL标签库的基本使用方法

    一 使用Struts标签之前需要经过下面3个步骤的配置. 1.导入TLD文件. 2.在web.xml中注册标签库. 3.在页面中引入标签库. 下面详细介绍以上步骤. 1 导入TLD文件. TLD文件是 ...

  9. Struts 有哪些经常使用标签库

    Struts 有哪些经常使用标签库 1.html标签库 2.bean标签库 3.logic标签库

随机推荐

  1. [SDOI 2016]征途

    Description 题库链接 将一个长度为 \(n\) 的正整数序列分为 \(m\) 段,问你这 \(m\) 段最小的方差 \(v\) 为多少.输出 \(v\times m^2\) . \(1\l ...

  2. [Luogu 3901]Difference

    Description Input Output Sample Input 4 2 1 2 3 2 1 3 2 4 Sample Output Yes No HINT 题解 莫队.加个标记数组维护该数 ...

  3. ●UVa 1589 Xiangqi(模拟)

    ●赘述题意 给出一个中国象棋残局,告诉各个棋子的位置,黑方只有1枚“将”,红方有至少2枚,至多7枚棋子,包含1枚“帅G”,和若干枚“车R”,“马H”,“炮C”.当前为黑方的回合,问黑方的“将”能否在移 ...

  4. hdu5586 BestCoder Round #64 (div.2)

    问题描述 给n个数{A}_{1},{A}_{2}....{A}_{n}A​1​​,A​2​​....A​n​​,你可以选择一个区间(也可以不选),区间里每个数x变成f(x),其中f(x)=(1890x ...

  5. [BZOJ]1046 上升序列(HAOI2007)

    和字典序有关的题型啊. Description 对于一个给定的S={a1,a2,a3,…,an},若有P={ax1,ax2,ax3,…,axm},满足(x1 < x2 < … < x ...

  6. 【集训第三天·疯狂训练】哦,顺带学习了manacher

    虽然说是疯狂训练吧,但是也没写多少题,就把伸展树的操作熟悉了一下,ac了5个题目. 一整天没啥可吐槽的,除了昨天在机房打游戏的某位朋友翻车后和教练谈了谈心2333 说题吧.. 1.BZOJ1208 H ...

  7. 华科机考:IP地址

    时间限制:1秒  空间限制:32768K 题目描述 输入一个ip地址串,判断是否合法. 输入描述: 输入的第一行包括一个整数n(1<=n<=500),代表下面会出现的IP地址的个数. 接下 ...

  8. 《Java技术》第一次作业

    (一)学习总结 1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么?不能只用文字描述,一定要写代码,通过具体实例加以说明. (1)使 ...

  9. 一个使用 Web Components 的音乐播放器: MelodyPlayer

    先上效果预览: Web Components 首先,什么是 Web Components ? MDN 给出的定义是: Web Components 是一套不同的技术,允许您创建可重用的定制元素(它们的 ...

  10. python常用执行方式&变量&input函数

    linux系统中执行py文件方式:  ./a.py 需要执行权限 chmod -R 777(最大权限) 常用执行方式: 1. ./a.py2. python a.py 文件内部头加上 #!/usr/b ...