Struts 2 表单标签

表单标签列表是 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 标签

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

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

最后我们有了 s:token 标签。 token标签生成一个唯一的token,用来判断表单是否被重复提交

呈现表单时,将放置一个隐藏变量作为标记值。例如,让我们说令牌是“ABC”。提交此表单时,Struts Fitler 会根据会话中存储的token检查令牌。如果匹配,它将从会话中删除令牌。现在,如果表单被意外重新提交(通过刷新或点击浏览器后退按钮),表单将使用“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>
</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标签

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

在第二个示例中,我们正在创建一个复选框列表。 这是为了收集用户的爱好。 用户可以有多个爱好,因此我们使用复选框而不是单选按钮。 该复选框填充了“体育”、“电视”和“购物”列表。 这将爱好显示为复选框列表。

下拉框 UI 标签

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

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

<html>
<head>
    <title>Hello 迹忆客(jiyik.com)</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标签

在上面的示例中,我们进行了比较以查看顶部选择框是否等于 Technical。如果是这样,那么我们将显示 IT 和硬件。

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

查看笔记

扫码一下
查看教程更方便