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标签库。

原文地址:https://www.cnblogs.com/husam/p/7929424.html