程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> struts2雜記(一)——使用doubleSelect,struts2doubleselect

struts2雜記(一)——使用doubleSelect,struts2doubleselect

編輯:JAVA綜合教程

struts2雜記(一)——使用doubleSelect,struts2doubleselect


一、前言

這段時間忙的要死,做項目,學框架,時間根本不夠用,只能盡量抽出時間記錄自己學過的東西。

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相同。代碼親測,可以使用。

筆者自己看的博客

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved