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简单的用户界面标签

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

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

所示的s:text用于在屏幕上显示文本。

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

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

在s:form内部,我们有一个隐藏的属性叫做secret。这在HTML中呈现一个隐藏的元素。在我们的例子中,“秘密”元素的价值是“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"%>

<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”的简单单选按钮。名称属性对于单选按钮标记是必需的,所以我们指定一个名字是“性别”。然后我们提供一个性别列表。该列表中填充了“男性”和“女性”的值。因此,在输出中我们会得到一个有两个值的单选按钮。

在第二个例子中,我们创建了一个复选框列表。这是为了收集用户的爱好。用户可以拥有多个爱好,因此我们使用复选框而不是单选按钮。该复选框填充了“运动”,“电视”和“购物”列表。这将兴趣作为复选框列表呈现。

选择UI标签

让我们探索由Struts提供的选择标签的不同变体。让我们看看带有选择标签的简单视图页面 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。最后,在我们的例子中,我们提供“摩羯座”作为组合框的默认值。

  • 在第四个例子中,我们有一个双重选择。当您想要显示两个选择框时使用双重选择。在第一个选择框中选择的值确定出现在第二个选择框中的内容。在我们的例子中,第一个选择框显示“技术”和“其他”。如果用户选择技术,我们将在第二个选择框中显示IT和硬件。否则,我们将显示会计和人力资源。这可以使用示例中显示的“list”和“doubleList”atrributes。

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

我们还需要为顶部框(“name ='Occupations')和底部框(doubleName ='occupations2')提供一个名称