struts2登录注册示例

We learned about Struts 2 Data tags in the last post, today we will look into the control tags provided by Struts 2 framework.

我们在上一篇文章中了解了Struts 2 Data标签 ,今天我们将研究Struts 2框架提供的控制标签。

Control tags are used for manipulation and navigation of data from a collection. Some of the important Struts 2 control tags are:

控制标签用于操作和导航集合中的数据。 一些重要的Struts 2控件标签是:

  1. if-elseif-else tags: These are the basic control tags used for conditional logic in result pages. elseif and else tags always work with if tags. if and elseif tags have test attribute where we can provide expression that should result in boolean values, true or false. Example usage is:

    <s:if test="expression">
    //do something
    </s:if>
    <s:elseif test="expression">
    //do something
    </s:elseif>
    <s:else>
    //do something
    </s:else>

    else tag doesn’t have any attribute.

    if-elseif-else标记 :这些是用于结果页面中的条件逻辑的基本控制标记。 elseif和else标签始终与if标签一起使用。 if和elseif标记具有test属性,我们可以在其中提供应产生布尔值(真或假)的表达式。 用法示例是:

    else标签没有任何属性。

  2. iterator tag: We can use iterator tag to loop through a collection of objects. The collection could be array, list, map etc. iterator tags provide option to define a variable in the ActionContext with status attribute. IteratorStatus provides the current status of iterator and expose some methods to get count, odd or even, first or last element etc. Example usage is:
    <s:iterator value="list" status="itStatus"><s:property/>
    </s:iterator>

    For iterating a map, we need to provide property tag value as key and value.

    The other control tags are provided to work with iterators.

    迭代器标签 :我们可以使用迭代器标签遍历对象集合。 集合可以是数组,列表,地图等。迭代器标签提供了在具有状态属性的ActionContext中定义变量的选项。 IteratorStatus提供了迭代器的当前状态,并公开了一些获取计数,奇数或偶数,第一个或最后一个元素等的方法。示例用法是:

    <s:iterator value="list" status="itStatus"><s:property/>
    </s:iterator>

    为了迭代地图,我们需要提供属性标签value作为keyvalue

    提供了其他控制标签以与迭代器一起使用。

  3. append tag: This tag can be used to append multiple lists and then use them in iterator. The lists to append are provided with param tag and lists are appended one after another. So first list elements will be retrieved first by iterator then second list elements and so on. Example usage is:
    <s:append var="myList"><s:param value="list1"></s:param><s:param value="list2"></s:param>
    </s:append>
    <s:iterator value="#myList"><s:property/>
    </s:iterator>

    append标签 :此标签可用于附加多个列表,然后在迭代器中使用它们。 要追加的列表带有param标记,并且列表是一个接一个地追加的。 因此,第一个列表元素将首先由迭代器检索,然后是第二个列表元素,依此类推。 用法示例是:

  4. merge tag: We can use merge tag to merge multiple lists. The first elements from all the lists are merged first, then second element and so on. We can use merge tag like below.
    <s:merge var="myList"><s:param value="list1"></s:param><s:param value="list2"></s:param>
    </s:merge>
    <s:iterator value="#myList"><s:property/><br>
    </s:iterator>

    合并标签 :我们可以使用合并标签合并多个列表。 所有列表中的第一个元素将首先合并,然后是第二个元素,依此类推。 我们可以使用如下所示的合并标签。

  5. sort tag: We can use sort tag to get the sorted list. We need to provide a comparator to be used for sorting the list. We can use it like below.
    <s:bean name="MyComparator" var="myComparator"></s:bean>
    <s:sort comparator="#myComparator" source="list">
    <s:iterator><s:property/><br>
    </s:iterator>
    </s:sort>

    sort标签 :我们可以使用sort标签来获取排序列表。 我们需要提供一个用于对列表进行排序的比较器。 我们可以像下面这样使用它。

  6. subset tag: We can use subset tag to get the subset of an iterator. We need to provide a Decider implementation that will be used by subset tag to filter elements as whether to include them in iterator or not. We can use it like below.
    <s:subset source="list" decider="myDecider">
    <s:iterator>
    <s:property/><br>
    </s:iterator>
    </s:subset>

    子集标签 :我们可以使用子集标签来获取迭代器的子集。 我们需要提供一个Decider实现,子集标记将使用该实现来过滤元素,以决定是否将元素包括在迭代器中。 我们可以像下面这样使用它。

  7. generator tag: We can use generator tag to create an iterator from given values. We can provide separator to use the delimiter for the values and we can also provide Converter implementation to convert the String to an Object. We can use it like below.
    <s:generator val="%{'1,2,3'}" separator="," var="intsIterator" />
    <s:iterator value="#intsIterator"><s:property /><br/>
    </s:iterator>

    generator tag :我们可以使用generator标签从给定的值创建一个迭代器。 我们可以提供分隔符以对值使用定界符,还可以提供Converter实现将String转换为Object。 我们可以像下面这样使用它。

Let’s see control tags in action with a simple struts 2 project. Our project structure will look like below image.

让我们看看一个简单的struts 2项目中的控制标签。 我们的项目结构如下图所示。

配置文件 (Configuration Files)

web.xml

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="https://java.sun.com/xml/ns/javaee" xsi:schemaLocation="https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"><display-name>Struts2ControlTagsExample</display-name><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>

pom.xml

pom.xml

<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>Struts2ControlTagsExample</groupId><artifactId>Struts2ControlTagsExample</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><dependencies><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-core</artifactId><version>2.3.15.1</version></dependency></dependencies><build><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>1.6</source><target>1.6</target></configuration></plugin><plugin><artifactId>maven-war-plugin</artifactId><version>2.3</version><configuration><warSourceDirectory>WebContent</warSourceDirectory><failOnMissingWebXml>false</failOnMissingWebXml></configuration></plugin></plugins><finalName>${project.artifactId}</finalName></build>
</project>

struts.xml

struts.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""https://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.devMode" value="false"></constant>
<constant name="struts.convention.result.path" value="/"></constant><package name="user" namespace="/" extends="struts-default"><action name="home" class="com.journaldev.struts2.actions.HomeAction"><result name="success">/home.jsp</result></action></package></struts>

Configuration files are self explanatory and used to configure Struts2 framework and action configuration for our example.

配置文件不言自明,用于配置示例的Struts2框架和操作配置。

Java豆 (Java Bean)

package com.journaldev.struts2.model;import java.util.List;
import java.util.Map;public class Employee {private int id;private String role;private List<String> citiesList;private List<String> countryList;private Map<String, String> propertiesMap;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getRole() {return role;}public void setRole(String role) {this.role = role;}public Map<String, String> getPropertiesMap() {return propertiesMap;}public void setPropertiesMap(Map<String, String> properties) {this.propertiesMap = properties;}public List<String> getCitiesList() {return citiesList;}public void setCitiesList(List<String> cities) {this.citiesList = cities;}public List<String> getCountryList() {return countryList;}public void setCountryList(List<String> countryList) {this.countryList = countryList;}}

A simple java bean class that will be used in Action class to set some values and then in JSP page to showcase the struts2 control tags usage.

一个简单的Java bean类,将在Action类中使用它来设置一些值,然后在JSP页面中使用以展示struts2控制标签的用法。

比较器类 (Comparator Class)

package com.journaldev.struts2.util;import java.util.Comparator;public class StringComparator implements Comparator<String> {@Overridepublic int compare(String param1, String param2) {return param1.compareToIgnoreCase(param2);}}

A simple Comparator implementation that will be used in result page sort tag example. We can use Comparator to sort a list of custom objects also, please read more at Java Comparator Example.

一个简单的Comparator实现,将在结果页排序标记示例中使用。 我们还可以使用Comparator对自定义对象列表进行排序,请在Java Comparator Example中内容。

动作班 (Action Class)

package com.journaldev.struts2.actions;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.apache.struts2.util.SubsetIteratorFilter.Decider;import com.journaldev.struts2.model.Employee;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;public class HomeAction extends ActionSupport implements ModelDriven<Employee>{private static final long serialVersionUID = 1L;@Overridepublic String execute(){emp.setId(100);emp.setRole("Developer");List<String> cities = new ArrayList<String>();cities.add("San Jose");cities.add("New Delhi");cities.add("Bangalore");cities.add("Los Angeles");emp.setCitiesList(cities);List<String> countries = new ArrayList<String>();countries.add("India");countries.add("USA");countries.add("UK");emp.setCountryList(countries);Map<String, String> props = new HashMap<String, String>();props.put("salary", "10000$");props.put("group", "directors");props.put("company", "journaldev");props.put("age", "25 years");emp.setPropertiesMap(props);return SUCCESS;}public Decider getCountryDecider(){return new Decider(){@Overridepublic boolean decide(Object obj) throws Exception {String input = (String) obj;if (input.equalsIgnoreCase("USA"))return false; //not included in sublistelsereturn true; //included in sublist}};}private Employee emp = new Employee();public Employee getEmp() {return emp;}public void setEmp(Employee emp) {this.emp = emp;}@Overridepublic Employee getModel() {return emp;}}

A simple action class implementation where we are populating Employee bean variables to be used in result page. The important point to note is getCountryDecider() method that will be used in result page subset tag example to get the subset iterator.

一个简单的操作类实现,我们在其中填充要在结果页中使用的Employee bean变量。 需要注意的重要一点是getCountryDecider()方法,该方法将在结果页子集标记示例中使用,以获取子集迭代器。

结果页 (Result Page)

home.jsp

home.jsp

<%@ page language="java" contentType="text/html; charset=US-ASCII"pageEncoding="US-ASCII"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Home Page</title>
</head>
<body>
<h4>Struts 2 Control Tags Example</h4><!-- if-elseif-else example -->
<s:if test="emp.id < 100"><strong>User id is under 100.</strong>
</s:if>
<s:elseif test="emp.role=='Developer'"><strong>User is Developer and id is greater than or equal to 100.</strong>
</s:elseif>
<s:else><strong>User is NOT Developer and id is greater than or equal to 100.</strong>
</s:else>
<br><br>
<!-- iterator tag example -->
Cities are:<br>
<s:iterator value="emp.citiesList" begin="0" step="1" var="citiesIterator" status="iteratorStatus">
<s:if test="#iteratorStatus.first">First City = <s:property/><br></s:if>
<s:elseif test="#iteratorStatus.last">Last City = <s:property/></s:elseif>
<s:else>City <s:property value="#iteratorStatus.count"/> = <s:property/><br></s:else>
</s:iterator>
<br><br>
Properties Map table is:
<table border="1" cellspacing="0" cellpadding="1">
<tr><th>Name</th><th>Value</th>
</tr>
<s:iterator value="emp.propertiesMap" status="maprowStatus"><tr><s:if test="#maprowStatus.odd == true"><td style="background: grey"><s:property value="key"/></td><td style="background: grey"><s:property value="value"/></td></s:if><s:else><td><s:property value="key"/></td><td><s:property value="value"/></td></s:else></tr>
</s:iterator>
</table>
<br><br>Appending Cities and Countries List:<br>
<s:append var="appendedList"><s:param value="emp.citiesList"></s:param><s:param value="emp.countryList"></s:param>
</s:append><s:iterator value="#appendedList" status="myListStatus"><s:property value="#myListStatus.count"/>. <s:property/><br>
</s:iterator>
<br><br>Merging Cities and Countries List:<br>
<s:merge var="mergedList"><s:param value="emp.citiesList"></s:param><s:param value="emp.countryList"></s:param>
</s:merge>
<s:iterator value="#mergedList" status="myListStatus"><s:property value="#myListStatus.count"/>. <s:property/><br>
</s:iterator>
<br><br>Sorting Cities List:<br>
<s:bean name="com.journaldev.struts2.util.StringComparator" var="myComparator"></s:bean>
<s:sort comparator="#myComparator" source="emp.citiesList">
<s:iterator status="myListStatus"><s:property value="#myListStatus.count"/>. <s:property/><br>
</s:iterator>
</s:sort>
<br><br>Excluding USA from the countries list:<br>
<s:subset source="emp.countryList" decider="countryDecider">
<s:iterator>
<s:property/><br>
</s:iterator>
</s:subset>
<br><br>Generate iterator example:<br>
<s:generator val="%{'apple|banana|orange'}" separator="|" var="fruitsIterator" /><s:iterator value="#fruitsIterator"><s:property /><br/></s:iterator></body>
</html>

This is the result page where we are using Struts2 control tags to manipulate data and collections. Please look into the usage of different tags carefully for better understanding.

这是结果页面,我们在其中使用Struts2控件标记来操纵数据和集合。 请仔细研究不同标签的用法,以更好地理解。

When we invoke home action in browser, we get following response page.

当我们在浏览器中调用home动作时,我们得到以下响应页面。

Download Struts2 Control Tags Example Project下载Struts2控件标签示例项目

Download the complete project from above link and play around with different attributes of the control tags to learn more about them.

从上面的链接下载完整的项目,并试用控制标签的不同属性以了解有关它们的更多信息。

That’s all for Struts2 Control tags example tutorial, I hope you liked it.

这就是Struts2 Control标签示例教程的全部内容,希望您喜欢它。

翻译自: https://www.journaldev.com/2237/struts-2-control-tags-example-tutorial

struts2登录注册示例

struts2登录注册示例_Struts 2控制标签示例教程相关推荐

  1. struts2登录注册示例_Struts 2动作示例教程

    struts2登录注册示例 If you are working on Struts 2, you will spent a lot of time developing Struts 2 Actio ...

  2. struts2登录注册示例_Struts 2文件上传示例

    struts2登录注册示例 Welcome to Struts 2 file upload example. File Upload is one of the common tasks of a w ...

  3. struts2登录注册示例_Struts2资源包和本地化示例

    struts2登录注册示例 Struts2 framework supports internationalization and we can create resource bundle prop ...

  4. 一个简单的登录注册网页的实现

    一个简单的登录注册网页的实现 通过 标签让标签内的内容居中显示,再通过标签中的method属性来设置请求方式为post(一般涉及密码等机密数据都用post请求):再通过action来设置请求地址.这其 ...

  5. Struts2之控制标签

    Struts2的控制标签,主要用于完成流程控制,以及对ValueStack中的控制,控制标签可以完成输出流程的控制,例如循环.分支等操作,也可以完成对集合的合并.排序等操作. 1.常用的控制标签有:i ...

  6. struts2 标签单选框_Struts 2 UI标签–表单,复选框,单选,选择,提交

    struts2 标签单选框 Struts2 UI tags are used to generate HTML form elements in result pages. Earlier we lo ...

  7. 易优CMS:user 登录注册入口标签

    user 登录注册入口标签 [基础用法] 名称:user 功能:动态显示登录.注册.退出.会员中心的入口: 语法: {eyou:user type='login'} 登录 {KaTeX parse e ...

  8. Struts2项目实战 微云盘(四):登录注册

    一.本节说明 进入github下载本项目(开源) 本节实现登录.注册的逻辑以及UI. 二.Struts相关配置 在使用Struts前必选先配置Struts. Step1:引入Struts所需jar包 ...

  9. 登录注册页面的示例代码

    下面是使用Vue3和element-plus写登录注册页面的示例代码: 首先,在main.js文件中引入Vue和element-plus组件库: import { createApp } from ' ...

最新文章

  1. 虚拟机安装ROS的IMG镜像(从U盘启动)
  2. c语言编一个开关量上升沿的程序,电工学(1)习题解答
  3. Hbase总结(十)Hhase性能调优
  4. 7-93 链表去重 (25 分)
  5. C#unix时间戳转换
  6. C语言程序设计课题分析,C语言程序设计综合实践性教学课题报告.doc
  7. 寻宝,大冒险!CSP202206-2
  8. 业余ACMer笔记·6月第三周补题
  9. 机械键盘cherry常见轴科普 --By Cheng
  10. 距离多普勒谱(RD谱)绘制方法及理解
  11. 企业实施WMS仓储管理系统需要规避哪些风险
  12. 论文笔记-高速无人机网络MAC协议
  13. 关于放大器失真的原因你了解多少呢?
  14. 克隆linux系统之后如何配置网络ip
  15. 某鱼app获取Cookie(token)
  16. Target Team工作任务及签到表(翟超)
  17. QString::fromLocal8Bit()函数
  18. Java添加水印(图片水印,文字水印)
  19. Linux查hudi服务的进程,Linux查看非root运行的进程
  20. 文件格式和压缩格式介绍

热门文章

  1. redis--服务器与客户端
  2. 工作经验总结:百万数据引发的性能瓶颈问题
  3. java InputStream读取数据问题【转】http://cuisuqiang.iteye.com/blog/1434416
  4. SUS安装配置简明图解攻略
  5. [转载] (三)Python关键字和内置函数
  6. [转载] 用 C++ 和 Java 写算法,差别大吗?
  7. jQuery读取和设定KindEditor值的方法
  8. PL\SQL结构控制、异常
  9. SQl SGA 整理
  10. Wildcard Matching