目录

Struts2 - 表单标签( Form Tags)

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

简单的UI标签

我们已经在我们的示例中使用了这些标记,我们将在本章中对它们进行刷新。 让我们看一个带有几个简单UI标签的简单视图页面email.jsp -

<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
   pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
   "http://www.w3.org/TR/html4/loose.dtd">
<html>
   <head>
      <s:head/>
      <title>Hello World</title>
   </head>
   <body>
      <s:div>Email Form</s:div>
      <s:text name = "Please fill in the form below:" />
      <s:form action = "hello" method = "post" enctype = "multipart/form-data">
         <s:hidden name = "secret" value = "abracadabra"/>
         <s:textfield key = "email.from" name = "from" />
         <s:password key = "email.password" name = "password" />
         <s:textfield key = "email.to" name = "to" />
         <s:textfield key = "email.subject" name = "subject" />
         <s:textarea key = "email.body" name = "email.body" />
         <s:label for = "attachment" value = "Attachment"/>
         <s:file name = "attachment" accept = "text/html,text/plain" />
         <s:token />
         <s:submit key = "submit" />
      </s:form>
   </body>
</html>

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

Struts简单的UI标签

如图所示,s:head生成Struts2应用程序所需的javascript和stylesheet元素。

接下来,我们有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:form中,我们有一个名为secret的隐藏属性。 这将在HTML中呈现隐藏元素。 在我们的例子中,“secret”元素的值为“abracadabra”。 该元素对最终用户不可见,用于将状态从一个视图传送到另一个视图。

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

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

然后,我们有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"%>
<html>
   <head>
      <title>Hello World</title>
      <s:head />
   </head>
   <body>
      <s:form action = "hello.action">
         <s:radio label = "Gender" name = "gender" list="{'male','female'}" />
         <s:checkboxlist label = "Hobbies" name = "hobbies"
         list = "{'sports','tv','shopping'}" />
      </s:form>
   </body>
</html>

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

Struts组UI标签

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

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

选择UI标签

让我们来探索Struts提供的Select Tag的不同变体。 让我们看一下带有select标签的简单视图页面HelloWorld.jsp -

<%@ page contentType = "text/html; charset = UTF-8"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<html>
   <head>
      <title>Hello World</title>
      <s:head />
   </head>
   <body>
      <s:form action = "login.action">
         <s:select name = "username" label = "Username"
            list = "{'Mike','John','Smith'}" />
         <s:select label = "Company Office" name = "mySelection"
            value = "%{'America'}" list="%{#{'America':'America'}}">
            <s:optgroup label = "Asia" 
               list = "%{#{'India':'India','China':'China'}}" />
            <s:optgroup label = "Europe"
               list="%{#{'UK':'UK','Sweden':'Sweden','Italy':'Italy'}}" />
         </s:select>
         <s:combobox label = "My Sign" name = "mySign"
            list = "#{'aries':'aries','capricorn':'capricorn'}" headerkey = "-1" 
            headervalue = "--- Please Select ---" emptyOption = "true" value = "capricorn" />
         <s:doubleselect label = "Occupation" name = "occupation"
            list = "{'Technical','Other'}" doublename = "occupations2"
            doubleList="top == 'Technical' ? 
            {'I.T', 'Hardware'} : {'Accounting', 'H.R'}" />
      </s:form>
   </body>
</html>

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

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')命名

↑回到顶部↑
WIKI教程 @2018