开发手册 欢迎您!
软件开发者资料库

Struts 2 - 表单标签

form 标记列表是Struts UI标记的子集.这些标记有助于呈现Struts Web应用程序所需的用户界面,并可分为三类.本章将介绍所有三种类型的UI标签

form 标记列表是Struts UI标记的子集.这些标记有助于呈现Struts Web应用程序所需的用户界面,并可分为三类.本章将介绍所有三种类型的UI标签

简单的UI标签

我们已在我们的示例中使用过这些标签,我们将在本章中介绍它们.让我们看一个简单的视图页面 email.jsp ,其中有几个简单的UI标签 :

<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"   pageEncoding = "ISO-8859-1"%><%@ taglib prefix = "s" uri = "/struts-tags"%>               Hello World               Email Form                                                                                                                           

如果你知道HTML,那么所有使用的标签都是非常常见的HTML标签,附加前缀 s:以及每个标签和不同的属性.当我们执行上面的程序时,我们得到以下用户界面,前提是您已经为所有使用的键设置了正确的映射.

Struts Simple UI tags

如图所示,s:head生成Struts2应用程序所需的javascript和样式表元素.

接下来,我们有s:div和s:文本元素. s:div用于呈现HTML Div元素.这对于不喜欢将HTML和Struts标签混合在一起的用户非常有用.对于那些人,他们可以选择使用s:div来渲染div.

如图所示的s:文本用于在屏幕上呈现文本.

接下来我们有了famiilar s:form标签. s:form标签有一个action属性,用于确定提交表单的位置.因为我们在表单中有一个文件上传元素,所以我们必须将enctype设置为multipart.否则,我们可以将其留空.

在表单标记的末尾,我们有s:submit标记.这用于提交表单.提交表单时,所有表单值都将提交到s:form标签中指定的操作.

在s:表单中,我们有一个名为secret的隐藏属性.这将在HTML中呈现隐藏元素.在我们的例子中,"secret"元素的值为"abracadabra".此元素对最终用户不可见,用于将状态从一个视图传送到另一个视图.

接下来我们有s:label,s:textfield,s:password和s :textarea标签.它们分别用于渲染标签,输入字段,密码和文本区域.我们已经在"Struts  - 发送电子邮件"示例中看到了这些内容.

这里要注意的重要一点是使用"key"属性. "key"属性用于从属性文件中获取这些控件的标签.我们已经在Struts2本地化,国际化章节中介绍了这个功能.

然后,我们有s:file标签,它呈现一个输入文件上传组件.该组件允许用户上传文件.在这个例子中,我们使用了s:file标签的"accept"参数来指定允许上传哪些文件类型.

最后我们有s:token标签.令牌标记生成一个唯一标记,用于查明表单是否已经双重提交

呈现表单时,隐藏变量将作为标记值放置.让我们说,例如令牌是"ABC".提交此表单时,Struts Fitler会根据会话中存储的令牌检查令牌.如果匹配,则从会话中删除令牌.现在,如果表单被意外重新提交(通过刷新或点击浏览器后退按钮),表单将以"ABC"作为令牌重新提交.在这种情况下,过滤器会再次针对存储在会话中的令牌检查令牌.但由于令牌"ABC"已从会话中删除,因此它将不匹配,Struts过滤器将拒绝该请求.

组UI标签

组UI标签用于创建单选按钮和复选框.让我们看一个简单的视图页面 HelloWorld.jsp ,带复选框和单选按钮标签 :

<%@ page contentType = "text/html; charset = UTF-8"%><%@ taglib prefix = "s" uri = "/struts-tags"%>         Hello World                                                      

当我们执行上述程序时,我们的输出看起来类似于以下 :

Struts组UI标签

现在让我们看看这个例子.在第一个示例中,我们创建了一个标签为"Gender"的简单单选按钮. name属性对于单选按钮标记是必需的,因此我们指定名称为"gender".然后我们提供性别列表.该列表填充了"男性"和"女性"的值.因此,在输出中我们得到一个带有两个值的单选按钮.

在第二个例子中,我们创建了一个复选框列表.这是为了收集用户的爱好.用户可能有多个爱好,因此我们使用复选框而不是单选按钮.该复选框填充了"sports","TV"和"Shopping"列表.这将爱好作为复选框列表.

选择UI标签

让我们探讨Struts提供的选择标签的不同变体.让我们看一个简单的视图页面 HelloWorld.jsp ,选择标签 :

<%@ page contentType = "text/html; charset = UTF-8"%><%@ taglib prefix = "s" uri = "/struts-tags"%>         Hello World                                       Office" name = "mySelection"            value = "%{'America'}" list="%{#{'America':'America'}}">                                                            

当我们执行上述程序时,我们的输出将类似于以下 :

Struts选择UI标签

现在让我们一个接一个地查看个案.

  • 首先,select标签呈现HTML选择框.在第一个示例中,我们创建了一个名为"username"的简单选择框和标签"username".选择框将填充一个包含名称Mike,John和Smith的列表.

  • 在第二个示例中,我们公司在美国设有总部.它还在亚洲和欧洲设有全球办事处.我们希望在选择框中显示办公室,但我们希望按照非洲大陆的名称对全球办事处进行分组.这是optgroup派上用场的地方.我们使用s:optgroup标签创建一个新组.我们给该组一个标签和一个单独的列表.

  • 在第三个例子中,使用了组合框.组合框是输入字段和选择框的组合.用户可以从选择框中选择一个值,在这种情况下,输入字段将自动填入用户选择的值.如果用户直接输入值,则不会选择选择框中的值.

  • 在我们的示例中,我们有一个列出太阳星座的组合框.选择框仅列出四个条目,允许用户键入他的太阳星座(如果它不在列表中).我们还在选择框中添加了一个标题条目. headerentry是显示在选择框顶部的那个.在我们的例子中,我们想要显示"请选择".如果用户没有选择任何内容,那么我们假设-1为值.在某些情况下,我们不希望用户选择空值.在这些条件下,可以将"emptyOption"属性设置为false.最后,在我们的示例中,我们提供"摩羯座"作为组合框的默认值.

  • 在第四个示例中,我们有一个双重选择.如果要显示两个选择框,则使用双精度选择.在第一个选择框中选择的值确定第二个选择框中显示的值.在我们的示例中,第一个选择框显示"Technical"和"Other".如果用户选择技术,我们将在第二个选择框中显示IT和硬件.否则我们将显示会计和人力资源.这可以使用示例中所示的"list"和"doubleList"atrributes.

在上面的例子中,我们做了一个比较以查看顶部选择框是否等于技术.如果是,那么我们显示IT和硬件.

我们还需要为顶部框("name ='Occupations')和底部框(doubleName ='occupations2)命名")