1、HTML 标记Struts HTML 标记可以大致地分为以下几个功能: 显示表单元素和输入控件 显示错误信息 显示其他 HTML 元素显示表单元素和输入控件struts 将 HTML 表单与为表单操作而定义的 ActionForm bean 紧密联系在一起。表单输入字段的名称与 ActionForm bean 里定义的属性名称是对应的。当第一次显示表单时,表单的输入字段是从 ActionForm bean 中移植过来的,当表单被提交时,请求参数将移植到 ActionForm bean 实例。所有可以在标记中使用的用来显示 HTML 输入控件的内嵌标记都使用下列属性来定义 JavaScript
2、事件处理器。属性 描述Onblur 字段失去了焦点Onchange 字段失去了焦点并且数值被更改了Onclick 字段被鼠标点击Ondblclick 字段被鼠标双击Onfocus 字段接收到输入焦点Onkeydown 字段拥有焦点并且有键按下onkeypress 字段拥有焦点并且有键按下并释放Onkeyup 字段拥有焦点并且有键被释放onmousedown 鼠标指针指向字段并且点击onmousemove 鼠标指针指向字段并且在字段内移动onmouseout 鼠标指针指向控件,但是指针在元素外围移动onmouseover 鼠标指针没有指向字段,但是指针在元素内部移动Onmouseup 鼠标指针指
3、向字段,并且释放了鼠标按键元素中能够被定义的其他一般属性有:属性 描述Accesskey 定义访问输入字段的快捷键Style 定义输入字段的样式styleClass 定义输入字段的样式表类Tabindex 输入字段的 tab 顺序表单标记标记用来显示 HTML 标记,可以指定 AcitonForm bean 的名称和它的类名。如果没有设置这些属性,就需要有配置文件来指定 ActionMapping 以表明当前输入的是哪个 JSP 页,以及从映射中检索的 bean 名和类。如果在 ActionMapping 指定的作用域中没有找到指定的名称,就会创建并存储一个新的 bean,否则将使用找到的 b
4、ean。标记能够包含与各种 HTML 输入字段相对应的子标记。标记属性如下:属性 描述Action 与表单相关的操作。在配置中,这个操作也用来标识与表单相关的ActionForm beanEnctype 表单 HTTP 方法的编码类型Focus 表单中需要初始化焦点的字段Method 表单使用的 HTTP 方法Name 与表单相关的 ActionForm bean 的名称。如果没有设置这个属性,bean的名称将会从配置信息中获得Onreset 表单复位时的 JavaScript 事件句柄Onsubmit 表单提交时的 JavaScript 事件句柄Scope 搜索 ActionForm bea
5、n 的范围。如果没有设置,将从配置文件中获取Style 使用的格式styleClass 这个元素的格式表类Type ActionForm bean 的完整名称。如果没有设置,将从配置文件获得例如:与表单相关的操作路径是 validateEmployee,而表单数据是通过 POST 传递的。对于这个表单来说,ActionForm bean 的其他信息,如 bean 名称类型,作用域,都是从表单指定操作的 ActionMapping 中检索得到的:如果配置文件中包含上述信息,并且请求 URI 的*.do 被映射到 ActionServlet,与表单相关的 ActionForm bean 的名称,类
6、型和作用域分别是empForm,com.example.EmployeeForm 和 request.这些属性也可以使用标记属性进行显示的定义。以下标记必须嵌套在标记里按钮和取消标记标记显示一个按钮控件;标记显示一个取消按钮。属性如下:属性 描述Property 定义在表单被提交时返回到服务器的请求参数的名称Value 按钮上的标记复位和提交标记和标记分别能够显示 HTML 复位按钮和提交按钮。文本和文本区标记和标记分别 HTML 文本框和文本区,属性如下:属性 描述Property 定义当表单被提交时送回到服务器的请求参数的名称,或用来确定文本元素当前值的 bean 的属性名称Name 属性
7、被查询的 bean 的名称,它决定了文本框和文本区的值。如果没有设置,将使用与这个内嵌表单相关的 ActionForm 的名称标记还有以下属性:属性 描述Maxlength 能够输入的最大字符数Size 文本框的大小(字符数)标记特有的属性如下:属性 描述Rows 文本区的行数Cols 文本区的列数检查框和复选框标记标记能够显示检查框控件。标记能够显示 HTML 复选框控件,请求对象在传递检查框名称时使用的 getParameterValues()调用将返回一个字符串数组。属性如下:属性 描述Name Bean 的名称,其属性会被用来确定检查是否以选中的状态显示。如果没有设置,将使用与这个内嵌
8、表单相关的 ActionFrom bean 的名称。Property 检查框的名称,也是决定检查框是否以选中的状态显示的 bean 属性名称。在复选框的情况下,这个属性必须是一个数组。Value 当检查框被选中时返回到服务器的请求参数的值例如:一个名为 married 的检查框,在表单提交时会返回一个”Y”.文件标记标记可以显示 HTML 文件控件。属性如下:属性 描述Name Bean 的名称,它的属性将确定文件控件中显示的内容。如果没设置,将使用与内嵌表单相关的 ActionForm bean 的名称property 这个属性定义了当表单被提交时送回到服务器的请求参数的名称,以及用来确定文
9、件控件中显示内容的 bean 属性名称Accept 服务器能够处理的内容类型集。它也将对客户浏览器对话框中的可选文件类型进行过滤Value 按钮上的标记,这个按钮能够在本地文件系统中浏览文件单选钮标记标记用来显示 HTML 单选钮控件,属性如下:属性 描述Name Bean 的名称,其属性会被用来确定单选钮是否以选中的状态显示。如果没有设置,将使用与这个内嵌表单相关的 ActionFrom bean 的名称。property 当表单被提交时送回到服务器的请求参数的名称,以及用来确定单选钮是否以被选中状态进行显示的 bean 属性的名称Value 当单选钮被选中时返回到服务器的值隐藏标记标记能够
10、显示 HTML 隐藏输入元素,属性如下:属性 描述Name Bean 的名称,其属性会被用来确定隐藏元素的当前值。如果没有设置,将使用与这个内嵌表单相关的 ActionFrom bean 的名称。property 定义了当表单被提交时送回到服务器的请求参数的名称,以及用来确定隐藏元素当前值的 bean 属性的名称Value 用来初始化隐藏输入元素的值密码标记标记能够显示 HTML 密码控件,属性如下:属性 描述maxlength 能够输入的最大字符数Name Bean 的名称,它的属性将用来确定密码元素的当前值。如果没有设置,将使用与这个内嵌表单相关的 ActionFrom bean 的名称。
11、property 定义了当表单被提交时送回到服务器的请求参数的名称,以及用来确定密码元素当前值的 bean 属性的名称redisplay 在显示这个字段时,如果相应的 bean 属性已经被设置了数据,这个属性决定了是否显示密码的内容Size 字段的大小选择标记标记能够显示 HTML 选择控件,属性如下:属性 描述multiple 表明这个选择控件是否允许进行多选Name Bean 的名称,它的属性确定了哪个。如果没有设置,将使用与这个内嵌表单相关的 ActionFrom bean 的名称。property 定义了当表单被提交时送回到服务器的请求参数的名称,以及用来确定哪个选项需要被选中的 be
12、an 属性的名称Size 能够同时显示的选项数目Value 用来表明需要被选中的选项选项标记(这个元素需要嵌套在标记里)标记用来显示 HTML 选项元素集合,属性如下:属性 描述collection Bean 集合的名称,这个集合存储在某个作用域的属性中。选项的数目与集合中元素的数目相同。Property 属性能够定义选项值所使用的 bean 属性,而 labelProperty 属性定义选项标记所使用的 bean 的属性labelName 用来指定存储于某个作用域的 bean,这个 bean 是一个字符串的集合,能够定义元素的标记(如果标志与值不相同)labelProperty 与 coll
13、ection 属性共同使用时,用来定义了存储于某个作用域的 bean,这个 bean 将返回一个字符串集合,能够用来写入元素的value 属性Name 如果这是唯一被指定的属性,它就定义了存储于某个作用域的 bean,这个 bean 将返回一个字符串集合,能够用来写入元素的value 属性property 这个属性在与 collection 属性共同使用时,定义了每个要显示选项值的独立 bean 的 name 属性。如果不是与 collection 属性共同使用,这个属性定义了由 name 属性指定的 bean 的属性名称(如果有 name 属性),或是定义了一个 ActionForm bea
14、n,这个 bean 将返回一个集合来写入选项的值我们看一下这个标记的一些例子:标记假设在某个作用域中有一个名为 optionCollection 的集合,它包含了一些具有optionValue 属性的独立的 bean,每个属性将作为一个选项的值。每个选项的标志由 bean的 optionLabel 属性属性进行定义。标记中 optionValues 代表一个存储在某个作用域中的 bean,它是一个字符串集合,能够用来写入选项的值,而 optionLabels 代表一个存储在某个作用域中的 bean,它也是一个字符串集合,能够用来写入选项的标志。显示错误信息的标记标记能够与 ActionErro
15、rs 结合在一起来显示错误信息。这个标记首先要从当前区域的资源文件中读取消息关键字 errors.header,然后显示消息的文本。接下去它会在 ActionErrors 对象(通常作为请求参数而存储在 Action.ERROR_KEY 关键字下)中循环,读取单个 ActionError 对象的消息关键字,从当前区域的资源文件中读取并格式化相应的消息,并且显示它们。然后它读取与 errors.footer 关键字相对应的消息并且显示出来。通过定义 property 属性能够过滤要显示的消息,这个属性的值应该与 ActionErrors对象中存储 ActionError 对象的关键字对应。属性如
16、下:属性 描述Bundle 表示应用程序作用域属性的名称,它包含着消息资源,其默认值Acion.MESSAGE_KEYLocale 表示会话作用域属性的名称,它存储着用户当前登录的区域信息。其默认值是 Action.ERROR_KEYName 表示请求属性的名称,它存储着 ActionErrors 对象。其默认值是Action.ERROR_KEYproperty 这个属性指定了 ActionErrors 对象中存储每个独立 ActionError 对象的关键字,它可以过滤消息例子:显示集合中所有的错误。显示存储在 missing.name 关键字的错误。其他 HTML 标记struts HTM
17、L 标记还定义了下列标记来显示其他 HTML 元素: : 显示 HTML 元素 : 显示图象标记 : 显示 HTML 链接或锚点 : 创建没有锚点标记的 URI这些标记的详细内容请参照 struts 文档。Bean 标记Bean 定义标记:可定义新 bean,可复制现有 bean,还可从现有 bean 复制属性。标记用来: 定义新字符串常数 将现有的 bean 复制到新定义的 bean 对象 复制现有 bean 的属性来创建新的 bean标记属性:属性 描述Id 新定义的 bean 脚本变量名称,必须设置Type 定义引入脚本变量的类Value 为 id 属性定义的脚本变量分配一个新的对象Na
18、me 目标 bean 的名称。若 value 属性没有设置,这个属性就必须设置property Name 属性定义的 bean 的属性名称,用来定义新的 beanScope 源 bean 的作用域。若没有设置,搜索范围是从页作用域到应用程序作用域toScope 目标 bean 的作用域。若没有设置,默认值是页作用域例如:定义一个 bean:源 bean 在页作用域中被拷贝大哦请求作用域中的另一个 bean:定义脚本变量的标记从多种资源中定义和生成作用域为当前页得变量,这些资源包括 cookie,请求参数,HTTP 标头等等。属性如下:属性 描述Id 脚本变量和要定义的页作用域属性的名称Name
19、 cookie/标头/参数的名称multiple 如果这个属性设置了任意一个数值,所有匹配的 cookie 都会被积累并存储到一个 Cookie(一个数组)类型的 bean 里。若无设置,指定 cookie的第一个值将作为 Cookie 类型的值Value 如果没有匹配的 cookie 或数值,就返回这个属性指定的默认值例如:脚本变量名称是 myCookie,用来创建这个属性的 cookie 的名称是 userName。脚本变量名称是 myHeader,请求标头的名称是 Accept-Language.脚本变量名称是 myPatameter,它保存的请求参数的名称也是 myParameter.
20、标记将对一个资源的响应进行检索,并引入一个脚本变量和字符串类型的页作用域属性。这个资源可以是一个页,一个 ActionForward 或一个外部 URL。与的不同是资源的响应被存储到一个页作用域的 bean 中,而不是写入到输出流。属性如下:属性 描述Id 脚本变量和要定义的页作用域属性的名称Page 一个内部资源forward 一个 ActionForwardHref 要包含的资源的完整 URL例如:脚本变量的名称是 myInclude,要检索的响应来自资源 MyJsp?x=1。标记将检索 web 应用中的资源,并引入一个脚本变量和 InputStream或字符串类型的页作用域属性。如果在检
21、索资源时发生问题,就会产生一个请求时间异常。属性如下:属性 描述Id 脚本变量和要定义的页作用域属性的名称Name 资源的相对路径Input 如果这个属性不存在,资源的类型就是字符串例如:脚本变量的名称是 myResource,要检索的资源的名称是 myResource.xml。显示 Bean 属性标记库中定义了标记,用来将 bean 的属性输送到封装的 JSP 页写入器。这个标记与类似,属性如下:属性 描述Name 要进行属性显示的 bean 的名称property 要显示的属性的名称。如果这个属性类有java.beans.PropertyEditor,getAsText()或 toStri
22、ng 方法会被调用Scope Bean 的作用域,若没有设置,搜索范围是从页到应用程序作用域Filter 如果设置 true,属性中的所有特殊 HTML 字符都将被转化为相应的实体引用Ignore 如果设置 false,当发现属性时会产生一个请求时间异常,否则返回 null例如:myBean 的属性 myProperty 将会被显示,作用域为请求,如果发现任何 HTML 特殊字符都将被转化为相应的实体引用。消息标记和国际化逻辑标记逻辑库的标记能够用来处理外观逻辑而不需要使用 scriptlet。Struts 逻辑标签库包含的标记能够有条件地产生输出文本,在对象集合中循环从而重复地产生输出文本,
23、以及应用程序流程控制。它也提供了一组在 JSP 页中处理流程控制的标记。这些标记封装在文件名为 struts-logic.tld 的标记包中。逻辑标记库定义的标记能够执行下列三个功能: 条件逻辑 重复 转发/重定向响应条件逻辑struts 有三类条件逻辑。第一类可以比较下列实体与一个常数的大小: 数值大小比较 判断数据项目是否存在 匹配性检查第一类条件逻辑标记:以下列出了这一类标记:标记 功能如果常数与被定义的实体相等,返回 true如果常数与被定义的实体不相等,返回 true如果常数大于等于被定义的实体,返回 true如果常数小于等于被定义的实体,返回 true如果常数小于被定义的实体,返回
24、 true如果常数大于被定义的实体,返回 true这一类的所有标记有相同的属性属性 描述Value 要进行比较的常数值Cookie 要进行比较的 HTTP cookie 的名称Header 要进行比较的 HTTP 请求标头的名称parameter 要进行比较的 HTTP 请求参数的名称Name 如果要进行比较的是 bean 或 bean 的属性,则这个属性代表 bean 的名称 property 要进行比较的 bean 属性的名称Scope Bean 的作用域,如果没有指定作用域,则它的搜索范围是从页到应用程序例如:The entered name is SomeName判断名为”name”的
25、请求参数的值是否是”SomeName” 。The value of bean.Prop is greater than 7判断在页的作用域中是否有一个名为”bean”的 bean,它有一个 prop 属性,这个属性的值是否大于 7。如果这个属性能够转化为数值,就进行数值比较,否则就进行字符串比较。第二类条件标记定义了两个标记: 它们的功能是在计算标记体之前判断特定的项目是否存在。标记的属性和属性值决定了要进行检查的项目。属性 描述Cookie 由这个属性指定的 cookie 将被检查是否存在Header 由这个属性指定的请求标头将被检查是否存在parameter 由这个属性指定的请求参数将被检
26、查是否存在Name 如果没有设置 property 属性,那么有这个属性指定的 bean 将被检查是否存在。如果设置了,那么 bean 和 bean 属性都将被检查是否存在。property 检查有 name 属性指定的 bean 中是否存在指定的属性Scope 如果指定了 bean 的名称,这就是 bean 的作用域。如果没有指定作用域,搜索的范围从页到应用程序作用域。例如:The bean property bean.prop is present标记判断在页作用域中是否存在一个名为”bean”的 bean,这个 bean 有一个 prop 属性。第三类条件标记比较复杂,这些标记根据模板匹
27、配的结果检查标记体的内容。换句话说,这些标记判断一个指定项目的值是否是一个特定常数的子字符串: 这些标记允许 JSP 引擎在发现了匹配或是没有发现时计算标记主体。属性如下:属性 描述Cookie 要进行比较的 HTTP cookie 的名称Header 要进行比较的的 HTTP 标头 的名称parameter 要进行比较的的 HTTP 请求参数的名称Name 若要对 bean 或 bean 的属性进行比较,这个属性是用户指定 bean 的名称location 如果设置了这个属性的值,将会在这个指定的位置(索引值)进行匹配scope 如果对 bean 进行比较,这个属性指定了 bean 的作用域
28、。如果没有设置这个参数,搜索范围是从页到应用程序作用域property 要进行比较的 bean 的属性名称value 要进行比较的常数值例如:The parameter name is a sub-string of the string xyz from index 1标记检查名为”name”的请求参数是否是”xyz”的子字符串,但是子字符串必须从”xyz”的索引位置 1 开始(也就是说子字符串必须是”y”或”yz” ) 。重复标记在逻辑标记库中定义了标记,它能够根据特定集合中元素的数目对标记体的内容进行重复的检查。集合的类型可以是java.util.Iterator,java.util.Collection,java.util.Map 或是一个数组。有三种方法可以定义这个集合: