struts标记库(2)
2.2 逻辑标记
逻辑库的标记能够用来处理外观逻辑而不需要使用scriptlet。struts逻辑标签库包含的标记能够有条件地产生输出文本,在对象集合中循环从而重复地产生输出文本,以及应用程序流程控制。它也提供了一组在jsp页中处理流程控制的标记。这些标记封装在文件名为struts-logic.tld的标记包中。逻辑标记库定义的标记能够执行下列三个功能:
条件逻辑
重复
转发/重定向响应
16
2.2.1 条件逻辑
struts有三类条件逻辑。第一类可以比较下列实体与一个常数的大小:
cookie
请求参数
bean或bean的参数
请求标头
以下列出了这一类标记:
标记功能<equal> 如果常数与被定义的实体相等,返回true <notequal> 如果常数与被定义的实体不相等,返回true <greaterequal> 如果常数大于等于被定义的实体,返回true <lessequal> 如果常数小于等于被定义的实体,返回true <lessthan> 如果常数小于被定义的实体,返回true <greaterthan> 如果常数大于被定义的实体,返回true
这一类的所有标记有相同的属性
属性描述value 要进行比较的常数值cookie 要进行比较的http cookie的名称header 要进行比较的http请求标头的名称parameter 要进行比较的http请求参数的名称name 如果要进行比较的是bean或bean的属性,则这个属性代表bean的名称property 要进行比较的bean属性的名称scope bean的作用域,如果没有指定作用域,则它的搜索范围是从页到应用程序
例如:
<logic:equal parameter=”name” value=”somename”>
the entered name is somename
</logic:equal>
判断名为”name”的请求参数的值是否是”somename”。
<logic:greaterthan name=”bean” property=”prop” scope=”page” value=”7”>
the value of bean.prop is greater than 7
</logic:greaterthan>
判断在页的作用域中是否有一个名为”bean”的bean,它有一个prop属性,这个属性的值是否大于7。如果这个属性能够转化为数值,就进行数值比较,否则就进行字符串比较。
第二类条件标记定义了两个标记:
<logic:present>
<logic:notpresent>
它们的功能是在计算标记体之前判断特定的项目是否存在。标记的属性和属性值决定了要进行检查的项目。
属性描述
17
cookie 由这个属性指定的cookie将被检查是否存在header 由这个属性指定的请求标头将被检查是否存在parameter 由这个属性指定的请求参数将被检查是否存在name 如果没有设置property属性,那么有这个属性指定的bean将被检查是否存在。如果设置了,那么bean和bean属性都将被检查是否存在。property 检查有name属性指定的bean中是否存在指定的属性scope 如果指定了bean的名称,这就是bean的作用域。如果没有指定作用域,搜索的范围从页到应用程序作用域。role 检查当前已经确认的用户是否属于特殊的角色user 检查当前已经确认的用户是否有特定的名称
例如:
<logic:notpresent name=”bean” property=”prop” scope=”page”>
the bean property bean.prop is present
</logic:notpresent>
标记判断在页作用域中是否存在一个名为”bean”的bean,这个bean有一个prop属性。
第三类条件标记比较复杂,这些标记根据模板匹配的结果检查标记体的内容。换句话说,这些标记判断一个指定项目的值是否是一个特定常数的子字符串:
<logic:match>
<logic:notmatch>
这些标记允许jsp引擎在发现了匹配或是没有发现时计算标记主体。属性如下:
属性描述cookie 要进行比较的http cookie的名称header 要进行比较的的http标头的名称parameter 要进行比较的的http请求参数的名称name 若要对bean或bean的属性进行比较,这个属性是用户指定bean的名称location 如果设置了这个属性的值,将会在这个指定的位置(索引值)进行匹配scope 如果对bean进行比较,这个属性指定了bean的作用域。如果没有设置这个参数,搜索范围是从页到应用程序作用域property 要进行比较的bean的属性名称value 要进行比较的常数值
例如:
<logic:match parameter=”name” value=”xyz” location=”1”>
the parameter name is a sub-string of the string xyz from index 1
</logic:match>
标记检查名为”name”的请求参数是否是”xyz”的子字符串,但是子字符串必须从”xyz”的索引位置1开始(也就是说子字符串必须是”y”或”yz”)。
2.2.2 重复标记
在逻辑标记库中定义了<logic:iterate>标记,它能够根据特定集合中元素的数目对标记体的内容进行重复的检查。集合的类型可以是java.util.iterator,java.util.collection
18
,java.util.map或是一个数组。有三种方法可以定义这个集合:
使用运行时间表达式来返回一个属性集合的集合
将集合定义为bean,并且使用name属性指定存储属性的名称。
使用name属性定义一个bean,并且使用property属性定义一个返回集合的bean属性。
当前元素的集合会被定义为一个页作用域的bean。属性如下,所有这些属性都能使用运行时表达式。
属性描述collection 如果没有设置name属性,它就指定了要进行重复的集合id 页作用域bean和脚本变量的名称,它保存着集合中当前元素的句柄indexed 页作用域jsp bean的名称,它包含着每次重复完成后集合的当前索引length 重复的最大次数name 作为集合的bean的名称,或是一个bean名称,它由property属性定义的属性,是个集合offset 重复开始位置的索引property 作为集合的bean属性的名称scope 如果指定了bean名称,这个属性设置bean的作用域。若没有设置,搜索范围从页到应用程序作用域type 为当前定义的页作用域bean的类型
例如:
<logic:iterate id=”currentint”
collection=”<% =mylist %>”
type=”java.lang.integer”
offset=”1”
length=”2”>
<% =currentint %>
</logic:iterate>
代码将从列表中的第一个元素开始重复两个元素并且能够让当前元素作为页作用域和java.lang.integer类型的脚本变量来使用。也就是说,如果mylist包含元素1,2,3,4等,代码将会打印1和2。
2.2.3 转发和重定向标记
转发标记
<logic:forward>标记能够将响应转发给重定向到特定的全局actionforward上。actionforward的类型决定了是使用pagecontext转发响应,还是使用sendredirect将响应进行重定向。此标记只有一个”name”属性,用来指定全局actionforward的名称,例如:
<logic:forward name=”myglobalforward”/>
重定向标记
<logic:redirect>标记是一个能够执行http重定向的强大工具。根据指定的不同属性,它能够通过不同的方式实现重定向。它还允许开发人员指定重定向url的查询参数。属性如下:
19
属性描述forward 映射了资源相对路径的actionforward href 资源的完整url page 资源的相对路径name map类型的页名称,请求,会话或程序属性的名称,其中包含要附加大哦重定向url(如果没有设置property属性)上的“名称-值”参数。或是具有map类型属性的bean名称,其中包含相同的信息(没有设置property属性) property map类型的bean属性的名称。bean的名称由name属性指定。scope 如果指定了bean的名称,这个属性指定搜索bean的范围。如果没有设置,搜索范围从页到应用程序作用域paramid 定义特定查询参数的名称paramname 字符串类型的bean的名称,其中包含查询参数的值(如果没有设置paramproperty属性);或是一个bean的名称,它的属性(在paramproperty属性中指定)包含了查询参数值paramproperty 字符串bean属性的名称,其中包含着查询参数的值paramscope paramname定义的bean的搜索范围
使用这个标记时至少要指定forward,href或page中的一个属性,以便标明将响应重定向到哪个资源。
2.3 html标记
struts html标记可以大致地分为以下几个功能:
显示表单元素和输入控件
显示错误信息
显示其他html元素
2.3.1 显示表单元素和输入控件
struts将html表单与为表单操作而定义的actionform bean紧密联系在一起。表单输入字段的名称与actionform bean里定义的属性名称是对应的。当第一次显示表单时,表单的输入字段是从actionform bean中移植过来的,当表单被提交时,请求参数将移植到actionform bean实例。
所有可以在<form>标记中使用的用来显示html输入控件的内嵌标记都使用下列属性来定义javascript事件处理器。
属性描述onblur 字段失去了焦点onchange 字段失去了焦点并且数值被更改了onclick 字段被鼠标点击ondblclick 字段被鼠标双击onfocus 字段接收到输入焦点onkeydown 字段拥有焦点并且有键按下
20
onkeypress 字段拥有焦点并且有键按下并释放onkeyup 字段拥有焦点并且有键被释放onmousedown 鼠标指针指向字段并且点击onmousemove 鼠标指针指向字段并且在字段内移动onmouseout 鼠标指针指向控件,但是指针在元素外围移动onmouseover 鼠标指针没有指向字段,但是指针在元素内部移动onmouseup 鼠标指针指向字段,并且释放了鼠标按键
<form>元素中能够被定义的其他一般属性有:
属性描述a
闽公网安备 35060202000074号