page="/logo.gif"height="50" width="200" alt="Web Logo"/>
10、html:link标签
Click demo
此行代码解析后:
Click demo
11、html:html标签
它有两个属性:locale和xhtml,两者都不是必需的。
此行代码解析后:
说明:
生成的结果取决于Struts应用程序所位于的服务器的locale。如果你将应用程序部署到一个不同locale的服务器,你不需要改变代码,Locale会自动调整。
12、html:errors(不常用)
通过一个简单的标签,你就可以在一个JSP页面上显示完全自定义的错误信息。功能超强大!!
说明:
这个标签在Request对象的属性集合中查找reserved key。如果它找到一个reserved key,它就假设这个key是一个String、或是一个String数组 (它包含在模块的MessageResources中查找的message keys)、或是类型为org.apache.struts.action.ActionErrors的一个对象。
如果在应用程序资源中存在相应的信息,那么就可以用下面这些可选的message keys:
errors.header or errors.prefix:相应的信息在错误信息的单独列表前显示。
errors.footer or errors.suffix:相应的信息在错误信息的单独列表后显示。
13、html:password
eg:
该标签中的一个很重要的属性是"redisplay",它用于重新显示以前输入到这个区域中的值。该属性的缺省值为true。然而,为了使password不能被重新显示,你或许希望将该属性的值设为false。
struts标签使用举例-logic
logic:empty
该标签是用来判断是否为空的。如果为空,该标签体中嵌入的内容就会被处理。该标签用于以下情况:
1)当Java对象为null时;
2)当String对象为""时;
3)当java.util.Collection对象中的isEmpty()返回true时;
4)当java.util.Map对象中的isEmpty()返回true时。
eg.
< logic:empty name="userList">
...
< /logic:empty>
该句等同于:
if (userList.isEmpty()) {
...
}
logic:notEmpty
该标签的应用正好和logic:empty标签相反,略。
logic:equal
该标签为等于比较符。
eg1. 比较用户的状态属性是否1,若为1,输出"启用";
< logic:equal name="user" property="state" value="1">
启用
< /logic:equal>
eg2. 如果上例中的value值是动态获得的,例如需要通过bean:write输出,因struts不支持标签嵌套,可采用EL来解决该问题。
......
< /logic:equal>
logic:notEqual
该标签意义与logic:equal相反,使用方法类似,略。
logic:forward
该标签用于实现页面导向,查找配置文件的全局forward。
eg. < logic:forward name="index"/>
logic:greaterEqual
为大于等于比较符。
eg. 当某学生的成绩大于等于90时,输出“优秀”:
< logic:greaterEqual name="student" property="score"value="90">
优秀
< /logic:greaterEqual>
logic:greaterThan
此为大于比较符,使用方法同logic:greaterEqual,略;
logic:lessEqual
此为小于等于比较符,使用方法同logic:greaterEqual,略;
logic:lessThan
此为小于比较符,使用方法同logic:greaterEqual,略;
logic:match
此标签比较对象是否相等;
eg1. 检查在request范围内的name属性是否包含"amigo"串:
< logic:match name="name"scope="request" value="amigo">
< bean:write name="name"/>中有一个“amigo”串。
< /logic:match>
eg2. 检查在request范围内的name属性是否已“amigo”作为起始字符串:
< logic:matchname="name" scope="request" value="amigo"location="start">
< bean:write name="name"/>以“amigo”作为起始字符串。
< /logic:match>
eg3.
你运行的是Windows系统
logic:notMatch
此标签用于比较对象是否不相同,与logic:match意义相反,使用方法类似,略。
logic:messagePresent
该标签用于判断ActionMessages/ActionErrors对象是否存在;
eg. 如果存在error信息,将其全部输出:
< logic:messagePresentproperty="error">
< html:messagesproperty="error" id="errMsg" >
< /html:messages>
< /logic:messagePresent >
logic:messagesNotPresent
该标签用于判断ActionMessages/ActionErrors对象是否不存在,使用方法与logic:messagePresent类似,略
logic:present
此标签用于判断request对象传递参数是否存在。
eg1. user对象和它的name属性在request中都存在时,输出相应字符串:
< logic:present name="user"property="name">
user对象和该对象的name属性都存在
< /logic:present>
eg2. 若有一个名字为“user”的JavaBean,输出对应字符串:
< logic:present name="user" >
有一个名字为“user”的JavaBean。
< /logic:present>
eg3.
< logic:present header="user-agent">
we got a user-agent header.
< /logic:present>
logic:notPresent
此标签用于判断request对象传递参数是否不存在,意义与了logic:present相反,使用方法类似,略。
logic:redirect
该标签用于实现页面转向,可传递参数。
eg1. < logic:redirect href="http://www.chinaitlab.com"/>
logic:iterator
用于显示列表为collection的值(List ,ArrayList,HashMap等)。
eg1. 逐一输出用户列表(userlList)中用户的姓名:
< logic:iterate id="user"name="userList">
< bean:write name="user"property="name"/>< br>
< /logic:iterate>
eg2. 从用户列表中输出从1开始的两个用户的姓名:
< logic:iterate id="user" name="userList"indexId="index" offset="1" length="2">
< bean:write name="index"/>.
< bean:write name="user"property="name"/>< br>
< /logic:iterate>
eg3. logic:iterator标签的嵌套举例
< logic:iterate id="user" indexId="index"name="userList">
< bean:write name="index"/>.
< bean:write name="user"property="name"/>< br>
< logic:iterate id="address"name="user" property="addressList" length="3"offset="1">
< bean:write name="address"/>
< /logic:iterate>
struts标签使用举例-BEAN
bean:write
该标签将指定的bean的属性值写到当前的JspWriter中,并且可以对输出进行格式化。
例如在struts的action着那个通过request.setAttribute("names","dddd");将属性值dddd中放入names,可在jsp页面中通过bean:write将names属性输出。
eg:
对于日期型的属性,可在bean:write标签中指定format来输出日期格式,
eg:
如果要输出某对象的某属性,例如属性名为person的对象的name属性,可通过如下方式:
eg:
bean:message
该标签用来从指定的locale中取回国际化的消息并输出,在这个过程中我们还可以传递5个以内的参数。message key可以通过key直接指定,也可以通过name和property间接的指定。
eg1.
该句要求在资源文件中有welcome.title.content的键值对(资源文件ApplicationSource.properties在struts的配置文件中指定)。
eg2. 传递参数信息的bean:message的用法,
在资源文件中greeting的配置举例如下:
greeting = hello, {0}, {1}.
bean:parameter
该标签取回请求中的参数值。如果没有指定multiple属性则依据刚取回的值创建一个String类型的bean,否则根据刚取回的值创建一个 String[]类型的数组。然后用id属性值将String或String[]绑定到page作用域中(这种绑定是为了其它标签能够使用该值),并创建 对应的scripting变量(这种变量是为了JSP脚本能够使用该值)。
eg. 当请求如下的jsp页面时:http://localhost:8080/test.jsp?orgId=1
在test.jsp页中可通过如下方式获得orgId参数:
bean:size
该标签创建一个java.lang.Integer类型的bean,该值为该标签指定的Collection或Map,List中所含元素的个数。它可和logic:iterate标签配合使用。
如下语句输出userList属性中元素的个数:
eg.
struts标签使用举例-NESTED
StrutsNested标签库的分两部分:
一部分用于表达JavaBean之间的嵌套关系
另一部分能够在特定的嵌套级别提供和其他Struts标签相同的功能。
,定义一个新的嵌套级别
,输出当前嵌套级别信息
标签可以表达JavaBean之间的嵌套关系
eg.
以三个JavaBean为例,分别是:PersonForm Bean,Person Bean和Address Bean,在PersonForm Bean中包含一个Person Bean类型的属性person,在Person Bean中又包含一个Address Bean类型的属性address。
则用nested标签表示如下:
定义两个标签,第一个标签嵌套在标签中,如下:
LastName:
.....
以上标签的上层JavaBean位于表单标签对应的PersonForm Bean,标签的property属性为“person",代表PersonForm Bean的person属性,这个person属性代表Person Bean,因此嵌套在标签内部的Nested标签都相对于这个Person Bean,例如第一个标签的property属性”lastName“,代表Person Bean的lastName属性。
第二个标签嵌套在第一个标签内部:如下
.............
Current nesting is :
Street1:
在以上代码中,第二个标签的property属性为“address",代表PersonBean 的address属性,这个address属性代表Address Bean,因此嵌套在第二个标签内部的Nested标签都相对于这个Address Bean。
第二个标签内还嵌套了一个标签,它显示当前的嵌套级别,输出结果为”person.address".
在默认情况下,标签的property属性为当前ActionForm Bean的某个属性,或者位于上层标签对应的JavaBean的某个属性。
可以使用标签来显式指定顶层级别的JavaBean。
标签的name属性指定JavaBean的名字,嵌套在标签中的标签的property属性为这个JavaBean的某个属性。
和其他标签库中的标签功能相同的Nested标签
许多Nestd标签库中的标签具有和其他标签库中的标签相同的功能,区别在于Nested标签库中的标签属性相对于当前的嵌套级别,例如
Last name:
上面的标签和标签具有相同的功能,都可以生成文本框,两者的区别在于标签的property属性为位于当前嵌套级别对应的JavaBean的某个属性,而标签的property属性为於当前表单对应的ActionForm Bean的某个属性。比如我有一个User类和一个UserInfo类,前者记录用户的帐号密码,后者记录用户的详细信息。前者也有一个UserInfo属性,这样它们两者是嵌套了。
现在我要把这个用户的帐号和详细信息都显示到界面上。 一种方式是在actionForm中用两个属性User user和UserInfo userInfo来存储,在jsp中就可以用如下方式显示出来:
帐号:
姓名:
性别:
由于user和userInfo本身就是嵌套的,所以第二种方式就在actionForm中使用一个User user属性即可:
帐号:
姓名:
性别:
这样处理是不是很方便了,actionForm可以直接放上数据存储对象,如果使用了hibernate做数据持久层,我们就可以直接把持久化对象放入 actionForm来显示到界面上,不用在actionForm里写很多属性来分别存储数据,也免去了给这些属性分别赋值的过程。
如果我们把上边例子中的标记换成,这就类似 于标记,是一个输入框,这样我们就可以把界面上输入一次提交到actionForm中的这个数据存储对象,比如 user。我们在action中就可以直接获得这个user进行处理,非常方便。