• Struts1.3——Struts标签


    1.struts标签的介绍

    Struts框架提供了一组非常丰富的框架组件,同时也提供了一组标签库用于和这些组件交互,主要介绍以下三类:

    • html标签
    • bean标签
    • logic标签

    2.Html标签库

    struts标签库中包括很多标签,其中html标签是最常用的标签之一,该标签库包含的标签可以用来创建Struts输入表单和用户界面。

    这类标签实际上就是普通的html标签,Struts设计者主要是为了和Struts框架统一,对普通的html标签做了一个封装,它的本质仍然是html标签。

    使用struts的html标签,在文件的开头要使用如下语句引入标签库:

    <%@ taglib prefix="html" uri="http://struts.apache.org/tags-html" %>

    举几个简单的例子:

    (1)<html:button>标签 
    这个标签就相当于HTML中的<input type="button">标签,它的property属性就相当于<button>name属性

    <html:button property="button1" value="提交"></html:button>
    • 1

    (2)<html:image>标签和<html:img>标签 
    <html:image>这个标签是一个图片按钮,而并不是一个单纯的图片。 
    <html:img>标签是一个单纯的图片。

    <html:image src="images/psb.jpg"></html:image>
    <html:img src="images/psb.jpg"/>
    • 1
    • 2

    (3)<html:link>标签 
    超链接标签。它可以通过href属性链接到当前应用外的链接,也可以通过page属性链接到当前应用下的某个资源。

    <html:link href="http://www.sohu.com">链接到Sohu</html:link>
    <html:link page="/login.jsp">Login</html:link>
    • 1
    • 2

    所以,在href属性中要写全路径,而在page属性中要写基于当前应用的路径。 
    使用struts的link标签有一个好处是:它自动帮我们做了URL重写的工作,所以我们不用再担心客户端禁用了Cookie。


    在html标签库中form标签是最重要的标签,它和struts框架紧密结合。form标签和一个ActionForm对应,当form的各个字段与ActionForm的属性匹配时,那么当客户把Form提交后,struts框架将用户的输入保存到对应的ActionForm中。这样就完成了标签与组件的交互工作。

    所以,<html:form>标签的action属性值所指的struts动作在struts-config.xml文件中必须正确配置,否则会报错。

    下面主要介绍一下form标签,以及其常用的子标签。

    (1)<html:form>标签

    用法如下:

    <html:form action="/login.do(struts动作)" method="post/get">
    • 1

    (2)<html:text>标签 
    该标签是最常用的HTML标签,它对应于HTML中的<input type="text">标签,它的property属性对应于<input type="text">标签的name属性,而且,它的property属性和其对应的ActionForm对象实例绑定,也就是说,property属性的值必须和ActionForm子类中相应的属性拥有同样的名字。否则,该标签将会抛出异常。

    <html:text property="name"/>
    • 1

    该标签的其他用法和<input type="text">这个标签的用法完全一致。

    (2)<html:radio>标签 
    <html:radio>标签对应于HTML中的<input type=radio>标签,如性别选项对应两个<html:radio>标签:

    <html:radio property="sex" value="0"/>
    女<html:radio property="sex" value="1"/>
    • 1
    • 2

    这里的两个radio标签中的property属性值必须都为一样的”sex”,这个名字和其对应的ActionForm子类中的属性值一致。每个value表示选中当前选项后,提交给服务器的值,也就是通过ActionForm的子类实例对象的相应属性可以获得的值。

    (3)<html:checkbox>标签 
    <html:checkbox>标签对应于HTML中的<input type=checkbox>标签,它的基本用法如下:

    <html:checkbox property="student" value="true"/>
    • 1

    其中的value属性表示勾选这个复选框时提交给服务端的值。

    (4)<html:multibox>标签 
    <html:multibox>标签也对应于HTML中的<input type=checkbox>标签,但是<html:multibox>标签和<html:checkbox>标签在映射到ActionForm子类实例对象的相应属性的映射方式不同。所有property属性值相同的<html:multibox>标签被映射到同一个property所指的属性中,并且这个属性是一个数组类型。而<html:checkbox>标签值对应了一个值。 
    <html:multibox>标签的基本用法如下:

    香蕉<html:multibox property="fruits" value="香蕉"/>
    苹果<html:multibox property="fruits" value="苹果"/>
    西瓜<html:multibox property="fruits" value="西瓜"/>
    桃子<html:multibox property="fruits" value="桃子"/>
    • 1
    • 2
    • 3
    • 4

    其中,value属性也表示选中当前复选框的返回值。

    (5)<html:select><html:option>标签 
    <html:select><html:option>标签组合对应了HTML中的<select><option>组合,基本用法如下:

    <html:select property="address">
        <html:option value="北京"/>
        <html:option value="上海"/>
        <html:option value="深圳"/>
        <html:option value="广州"/>
    </html:select>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    其中,value属性表示在下拉列表框中选择某一项时像服务端提交的值。

    (6)<html:submit><html:reset>标签 
    这两个标签分别对应了HTML中的<input type="submit"><input type="submit">标签,用法如下:

    <html:submit value="提交"/>
    <html:reset value="重置"/>
    • 1
    • 2

    除了上述所介绍的之外,Struts1的HTML标签库还有其他的标签,这里不再一一赘述。

    3.Bean标签库

    Bean标签库为访问Bean和它的属性提供了方便的机制: 
    1.该标签库包含的标签可以用来创建bean、访问bean和访问bean的属性。 
    2.提供了依据cookies、headers和parameters的值创建相关bean的能力。

    使用struts的bean标签库,也需要在文件的开头引入:

    <%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean" %>

    我们常用的主要是<bean:write>标签和<bean:message>标签,下面也主要介绍这两种标签。

    (1)<bean:write>标签 
    该标签主要用来输出,与JSTL中的<c:out>标签类似,但是用法略有不同,如下:

    <%
    request.setAttribute("abc","Hello World!");
    Cat cat = new Cat("小花猫",5);
    request.setAttribute("cat1", cat);
    %>
    <!-- bean:write 用于输出信息 -->
    <h1>输出变量</h1>
    <bean:write name="abc" scope="request"/>
    <h1>输出对象的属性值</h1>
    <bean:write name="cat1" property="name" scope="request"/>
    <bean:write name="cat1" property="age" scope="request"/>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    (2)<bean:message>标签 
    该标签通常和资源文件配合使用,可以更加方便地输出信息,这些信息在资源文件中配置。 
    所谓的资源文件,就是指struts自动为我们配置的ApplicationResource.properties文件:

    比如,我们在资源文件中配置如下:

    key1 = welcome {0}
    • 1

    在JSP页面,我们可以做如下输出:

    <bean:message key="key1" arg0="John"/>
    • 1

    此时,界面会输出 welcome John

    这个标签通常用于国际化,在资源文件中用不同的语言配置不同的提示语,在界面上判断输出。

    4.logic标签库

    logic标签库主要用于管理和条件相关的输出,都某些对象进行迭代和输出,和流程管理。

    同样的,引入logic标签库:

    <%@ taglib prefix="logic" uri="http://struts.apache.org/tags-logic" %>

    (1)<logic:iterate>循环标签 
    与jstl中的<c:forEach>标签类似,使用方法如下:

    <%
    Cat cat1 = new Cat("小黑", 5);
    Cat cat2 = new Cat("小花", 6);
    Cat cat3 = new Cat("小灰", 7);
    ArrayList<Cat> al = new ArrayList<Cat>();
    al.add(cat1);
    al.add(cat2);
    al.add(cat3);
    request.setAttribute("cats", al);
    %>
    <logic:iterate id="cat" name="cats" scope="request">
        <bean:write name="cat" property="name" />
        <bean:write name="cat" property="age" />
        <br>
    </logic:iterate>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    这里,循环的对象为request域中的cats,每次将对象赋给id=cat的变量,然后再调用bean:write标签输出。

    其实更简单的,这里也可以直接用EL表达式输出,效果是一样的:

    <logic:iterate id="cat" name="cats" scope="request">
        ${cat.name}
        ${cat.age }<br>
    </logic:iterate>
    • 1
    • 2
    • 3
    • 4

    (2)<logic:greaterThan>标签 
    该标签用于判断一个变量是否大于一个值。如下,我们可以循环判断哪一只猫的年龄大于5岁:

    <logic:iterate id="cat" name="cats">
    <logic:greaterThan name="cat" value="5" property="age">
            ${cat.name}的年龄大于5岁!<br>
        </logic:greaterThan>
    </logic:iterate>
    • 1
    • 2
    • 3
    • 4
    • 5

    与此类似的,还有<logic:equal><logic:greaterEqual><logic:lessThan>标签等等。

    (3)<logic:empty><logic:notEmpty>标签 
    这两个标签用于判断在一个域对象中是否存在某一个属性,如下例:

    <logic:empty name="ee" scope="request">
        ee属性在request域对象中不存在<br>
    </logic:empty>
    
    <logic:notEmpty name="cats" scope="request">
        cats属性在request域对象中存在<br>
    </logic:notEmpty>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    到这里,我们已经知道了很多不同的标签,有HTML原生标签,JSTL标准标签,EL表达式和Struts标签,其中有很多标签的功能是一样的,这里给出一个选择使用标签的原则:

    JSTC -> EL -> Struts

    即,优先使用JSTL和EL表达式,最后再选择使用struts标签库。

  • 相关阅读:
    Android 侧滑(双向滑动菜单)效果
    Android中PopupWindow中有输入框时无法弹出输入法的解决办法
    Android 调用图库选择图片实现和参数详解
    5.抽象类篇
    4.事件篇
    3.委托篇
    2.结构篇
    1.枚举篇
    读取excel到数据库里面
    Windows系统安装docker
  • 原文地址:https://www.cnblogs.com/husam/p/7929424.html
Copyright © 2020-2023  润新知