一、前言

这段时间忙的要死,做项目,学框架,时间根本不够用,只能尽量抽出时间记录自己学过的东西。

1.1、doubleSelect

在之前学习中,我们使用过二级列表,相信很多人都理解其原理,在struts中,同样也为我们准备了二级列表,使用doubleSelect就能够时间

进入主题

1、搭建环境(这里笔者使用的struts框架是2.3的,传送门

2、配置struts2.3环境

 2.1、web.xml配置过滤器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>LearStruts2_4</display-name>
<welcome-file-list>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<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>

2.2、在WEB-INF中新建class文件夹,文件夹下新建struts.xml配置信息

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts> <constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="doubleselectTag" class="com.struts.ui.action.DoubleSelectTagAction">
<result name="success">/doubleSelectTag.jsp</result>
</action>
</package> </struts>

3、新建实体类

package com.struts.ui.action;

public class City {
private int id; private String name; public City(){
} public City(int id,String name){
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

City

package com.struts.ui.action;

public class Provice {
private int id; private String name; public Provice(){ } public Provice(int id,String name){
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} }

Provice

4、新建DoubleSelectTagAction类继承ActionSupport

package com.struts.ui.action;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.ValueStack; /**
* 使用doubleSelect 二级联下拉,配置环境是struts2.3 tomcat8.0
* 相关的类有:
* City.java
* Provice.java
* doubleSelectTag.jsp
* DoubleSelectTagAction.java
* 访问:http://localhost:8080/LearStruts2_4/doubleselectTag
* 目的:简单就是选择一级列表之后出现二级菜单选项
* 这里使用的是传递对象的id到jsp页面,之后通过id查找
* */ public class DoubleSelectTagAction extends ActionSupport {
private List<Provice> provices;// Provice对象的列表
private Map<Integer, List<City>> cityMap;// 以Provice对象为key,Provice对应的City对象的列表作为value public Map<Integer, List<City>> getCityMap() {
return cityMap;
}
public DoubleSelectTagAction(){ provices = new ArrayList<Provice>(); Provice provice1 = new Provice(1,"四川省");
Provice provice2 = new Provice(2,"山东省");
Provice provice3 = new Provice(3,"湖南省");
Provice provice4 = new Provice(4,"广东省"); provices.add(provice1);
provices.add(provice2);
provices.add(provice3);
provices.add(provice4); List<City> cities1 = new ArrayList<City>();
List<City> cities2 = new ArrayList<City>();
List<City> cities3 = new ArrayList<City>();
List<City> cities4 = new ArrayList<City>(); cities1.add(new City(1,"成都市"));
cities1.add(new City(2,"绵阳市")); cities2.add(new City(1,"济南市"));
cities2.add(new City(2,"青岛市")); cities3.add(new City(1,"长沙市"));
cities3.add(new City(2,"郴州市")); cities4.add(new City(1,"广州市"));
cities4.add(new City(2,"深圳市")); cityMap = new HashMap<Integer,List<City>>();
cityMap.put(provice1.getId(), cities1);
cityMap.put(provice2.getId(), cities2);
cityMap.put(provice3.getId(), cities3);
cityMap.put(provice4.getId(), cities4); }
public String execute() throws Exception {
return SUCCESS;
} public List<Provice> getProvices(){
return provices;
}
}

5、新建jsp视图页面显示数据

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<s:form action="doubleselectTag">
<s:doubleselect label="请选择所在省市" name="provice" list="provices"
listKey="id" listValue="name" doubleList="cityMap.get(top.id)" doubleListKey="id"
doubleListValue="name" doubleName="city"
headerValue="----请选择----" emptyOption="true" />
</s:form>
<!--
需要注意的点:
1、list 是doubleSelectTagAction中第一个泛型集合的名称
2、listKey 是City类的属性id
3、listValue 是City类的属性name
4、doubleList 是读取map集合,top是当前list中集合的对象,注意 cityMap.get(top.id)中的id和listkey的值必须相同,cityMap是集合名称
5、doublelistkey 是map集合对象的id 如果DoubleSelectTagAction中 map集合存放的键是对象的话,那么doubleList就必须改为对象【doubleList="cities"】
-->
</body>
</html>

注意点:此处是map集合的键是id,所以使用到cityMap.get(top.id),下面这种是map集合为对象的时候,代码只是有点不同。

DoubleSelectTagAction

jsp页面

doubleSelectTag.jsp

效果如下:效果是有的,是笔者的录制软件的问题

总结:

原理跟二级列表类似,需要注意的点是:当使用id时,必须保证listkey=id 和 doubleList= citymap.get(top.id) 中的top.id相同。代码亲测,可以使用。

笔者自己看的博客

struts2杂记(一)——使用doubleSelect的更多相关文章

  1. struts2学习笔记之表单标签的详解:s:checkbox/radio/select/optiontransferselect/doubleselect/combobox

    struts2中的表单标签都是以s标签的方式定义的,同时,struts2为所有标签都提供了一个模板,C:\Users\180172\Desktop\struts2-core-2.2.1.1.jar\t ...

  2. struts2 笔记04 杂记

    流程: 1. StrutsPrepareAndExcuteFilter:StrutsPrepareAndExcuteFilter作为前端控制器,是整个Struts2的调度中心. 2. ActionMa ...

  3. Struts2框架之-Struts2的标签

    Struts2包含哪些标签? 解答: A: <s:a href=”"></s:a>—–超链接,类似于html里的<a></a> <s:a ...

  4. struts2进阶篇(5)

    一.OGNL简介 OGNL (Object-Graph Navigation Language)的缩写,简称对象图导航语言. OGNL表达式的特特点: >能够取对象的属性,也能调用对象的方法. ...

  5. Struts2(十一)OGNL标签三与Struts2标签

    一.UI标签 二.简单例子 <h1>添加信息</h1> <!--通过指定theme的属性改变主题 --> <s:form action="" ...

  6. Struts2标签简介

    Struts2标签简介 Struts2标签的优势 标签库简化了用户对标签的使用 结合OGNL使用,对于集合.对象的访问功能非常强大 提供可扩展的主题.模板支持,极大简化了视图页面的编写 不依赖任何表现 ...

  7. Struts2标签库

    一. 写jsp页面的时候,在struts2中,用的是s标记,先引入标记: <%@ taglib prefix="s" uri="/struts-tags" ...

  8. Struts2的标签库(五)——表单标签

    Struts2的标签库(五) --表单标签 几个特殊的表单标签的使用: 1.checkboxlist标签 该标签用于创建多个复选框,用于同时生成多个<input type="check ...

  9. struts2请求过程源码分析

    Struts2是Struts社区和WebWork社区的共同成果,我们甚至可以说,Struts2是WebWork的升级版,他采用的正是WebWork的核心,所以,Struts2并不是一个不成熟的产品,相 ...

随机推荐

  1. mac好用的markdown编辑器

    在刚开始接触markdown的时候,就被吸引了.此后一直在找贴心的好用的markdown编辑器.印象笔记和马克飞象配合着用也是挺好的,唯一的缺点就是比较封闭,发个笔记的链接给同学,还得注册才能看,导致 ...

  2. 如何理解MySQL中auto_increment?

    1.auto_increment用于主键自动增长.比如从1开始增长,当把第一条数据删除,再插入第二条数据时,主键值为2,不是1.

  3. mysql数据库主从同步

    环境: Mater:   CentOS7.1  5.5.52-MariaDB  192.168.108.133 Slave:   CentOS7.1  5.5.52-MariaDB  192.168. ...

  4. Linux环境变量设置

    修改环境变量PATH 最近为root添加一个环境变量发现sudo su进去没有变化所以总结了一下所有设置环境变量的方法: 查看PATH:echo $PATH 直接在命令行修改,就可以使用,但是只有在当 ...

  5. Linux实战教学笔记03:操作系统发展历程及系统版本选择

    标签(空格分隔): Linux实战教学笔记-陈思齐 第1章 Linux简介 1.1 什么是操作系统? 简单讲:操作系统就是一个人与计算机硬件的中介. 操作系统,英文名称Operating System ...

  6. Xamarin中使用DatePickerDialog的相关问题

    在Xamarin中在使用Datepicker的时候,一般情况下只需要在对应的按钮或其他控件的点击事件中使用如下语句即可完成: EditText etBirthday = FindViewById< ...

  7. mono for android学习过程系列教程(1)

    直接进入主题,关于mono for android的学习,首先配置好环境,如何配置环境,度娘谷歌一大堆,记得使用破解版. 我自己是百度“黑马四期”传智播客的视频,里面有破解版开发环境的软件. 今天直接 ...

  8. 使用“Cocos引擎”创建的cpp工程如何在VS中调试Cocos2d-x源码

    前段时间Cocos2d-x更新了一个Cocos引擎,这是一个集合源码,IDE,Studio这一家老小的整合包,我们可以使用这个Cocos引擎来创建我们的项目. 在Cocos2d-x被整合到Cocos引 ...

  9. API Monitor简介(API监控工具)

    API Monitor是一个免费软件,可以让你监视和控制应用程序和服务,取得了API调用. 它是一个强大的工具,看到的应用程序和服务是如何工作的,或跟踪,你在自己的应用程序的问题. 64位支持 API ...

  10. CSharpGL(13)用GLSL实现点光源(point light)和平行光源(directional light)的漫反射(diffuse reflection)

    CSharpGL(13)用GLSL实现点光源(point light)和平行光源(directional light)的漫反射(diffuse reflection) 2016-08-13 由于CSh ...