Bootstrap级联下拉菜单,你肯定用得到(2)

简介: Bootstrap级联下拉菜单,你肯定用得到

③、ProcityController

前端介绍完了,我们回到后端进行介绍,当然了,你也可以忽略本节,因为不是所用的关联数据都通过springMVC这种方法获取,那么先预览一下代码吧!

package com.honzh.spring.controller;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.honzh.biz.database.entity.City;
import com.honzh.biz.database.entity.Option;
import com.honzh.biz.database.entity.Provincial;
import com.honzh.common.util.JsonUtil;
import com.honzh.spring.service.CityService;
import com.honzh.spring.service.ProvincialService;
@Controller
@RequestMapping(value = "/procity")
public class ProcityController extends BaseController {
    private static Logger logger = Logger.getLogger(ProcityController.class);
    /**
     * 当传递city_code,则表明下拉框要被选中,否则不选中
     */
    @RequestMapping("")
    public void index(@RequestParam(value = "city_code", required = false) String city_code,
            @RequestParam(value = "pro_code", required = false) String pro_code, HttpServletResponse response) {
        try {
            logger.debug("获取所在地区" + city_code + ", 省" + pro_code);
            // 如果pro_code为””,则表明要获取城市菜单,否则获取市级菜单
            if (!pro_code.equals("")) {
                Integer pro_id = ProvincialService.getInstance().getByProvincialcode(pro_code).getId();
                List<City> citys = CityService.getInstance().getCitysByProvincialId(pro_id);
                List<Option> coptions = new ArrayList<Option>(citys.size());
                for (City city : citys) {
                    Option coption = new Option();
                    coption.setId(city.getId());
                    coption.setName(city.getCname());
                    coption.setValue(city.getCode());
                    // 市级菜单被选中
                    if (city_code != null && !city_code.equals("")) {
                        if (city.getCode().equals(city_code)) {
                            coption.setSelected("selected");
                        }
                    }
                    coptions.add(coption);
                }
                renderJson(response, coptions);
            } else {
                List<Provincial> provincials = ProvincialService.getInstance().getProvincials();
                // 转换成标准的option属性(name,value,selected)
                List<Option> options = new ArrayList<Option>(provincials.size());
                // 被选中的省市
                // 则说明是展示页面,此时需要为省级菜单和市级菜单设置选择项
                if (city_code != null && !city_code.equals("")) {
                    Provincial selected_provincial = ProvincialService.getInstance().getProvincialByCitycode(city_code);
                    pro_code = selected_provincial.getProcode();
                } else {
                    pro_code = provincials.get(0) == null ? "" : provincials.get(0).getProcode();
                }
                for (Provincial provincial : provincials) {
                    Option option = new Option();
                    option.setId(provincial.getId());
                    option.setName(provincial.getProname());
                    option.setValue(provincial.getProcode());
                    if (!pro_code.equals("") && provincial.getProcode().equals(pro_code)) {
                        option.setSelected("selected");
                    }
                    options.add(option);
                }
                renderJson(response, JsonUtil.toJson(options));
            }
        } catch (Exception e) {
            logger.error(e.getMessage());
            logger.error(e.getMessage(), e);
            renderJson(response, null);
        }
    }
}

@RequestParam(value = "city_code", required = false) String city_code,对于RequestParam注解,其实非常好用,这里就不多做解释,只是推广一下,固定个数的参数,用该注解更易于代码的维护。

ProvincialService类、CityService类就是两个单例,尽量把数据放置在内存当中,减少查询数据库的次数,稍候贴出来一个例子。

Option类就是单纯的封装前端option组件的关键属性,便于组件的通用化。

renderJson(response, JsonUtil.toJson(options));将数据json化后返回,稍候贴上详细代码。

④、ProvincialService.java


只贴出来代码例子,不做详细解释,毕竟不是本章重点。

package com.honzh.spring.service;
import java.util.ArrayList;
import java.util.List;
import com.honzh.biz.database.entity.City;
import com.honzh.biz.database.entity.Provincial;
import com.honzh.biz.database.mapper.ProvincialMapper;
import com.honzh.common.spring.SpringContextHolder;
public class ProvincialService {
    private static Object lock = new Object();
    private static ProvincialService config = null;
    private ProvincialService() {
        provincials = new ArrayList<Provincial>();
        ProvincialMapper mapper = SpringContextHolder.getBean(ProvincialMapper.class);
        provincials.addAll(mapper.getProvincials());
    }
    public static ProvincialService getInstance() {
        synchronized (lock) {
            if (null == config) {
                config = new ProvincialService();
            }
        }
        return (config);
    }
    public Provincial getByProvincialcode(String provincial_code) {
        for (Provincial provincial : provincials) {
            if (provincial.getProcode().equals(provincial_code)) {
                return provincial;
            }
        }
        return null;
    }
    private List<Provincial> provincials = null;
    public List<Provincial> getProvincials() {
        return provincials;
    }
    public Provincial getProvincialByCitycode(String city_code) {
        City city = CityService.getInstance().getCityByCode(city_code);
        for (Provincial provincial : provincials) {
            if (provincial.getId().intValue() == city.getProid().intValue()) {
                return provincial;
            }
        }
        return null;
    }
    public Provincial getProvincialByCode(String province_code) {
        for (Provincial provincial : provincials) {
            if (provincial.getProcode().equals(province_code)) {
                return provincial;
            }
        }
        return null;
    }
}

⑤、renderJson方法

    /**
     * 如果出错的话,response直接返回404
     */
    protected void renderJson(HttpServletResponse response, Object responseObject) {
        PrintWriter out = null;
        try {
            if (responseObject == null) {
                response.sendError(404);
                return;
            }
            // 将实体对象转换为JSON Object转换
            String responseStr = JsonUtil.toJson(responseObject);
            response.setCharacterEncoding("UTF-8");
            response.setContentType("application/json; charset=utf-8");
            out = response.getWriter();
            out.append(responseStr);
            logger.debug("返回是:" + responseStr);
        } catch (IOException e) {
            logger.error(e.getMessage());
            logger.error(e.getMessage(), e);
        } finally {
            if (out != null) {
                out.close();
            }
        }
    }
相关文章
Bootstrap5 下拉菜单7
按钮组中可以嵌入下拉菜单,实现更多功能选项。示例展示了水平和垂直按钮组中添加下拉菜单的方法,通过 `dropdown-toggle` 类和 `data-bs-toggle=&quot;dropdown&quot;` 属性实现下拉效果。
Bootstrap5 下拉菜单6
使用 `.dropdown-item-text` 类可以在下拉菜单中添加纯文本项,
|
3月前
|
前端开发
Bootstrap5 下拉菜单5
此示例展示了如何使用 Bootstrap 的 `dropstart` 类创建一个向左弹出的下拉菜单。通过在 `div` 元素上添加 `dropstart` 类,可以实现下拉菜单从按钮左侧弹出的效果。菜单包含三个链接项。
Bootstrap5 下拉菜单4
要使上拉菜单向上弹出,可在 div 元素中添加 &quot;dropup&quot; 类。示例代码包括一个按钮和一个包含三个链接的下拉菜单列表。当点击按钮时,菜单将向上弹出。
Bootstrap5 下拉菜单3
下拉菜单默认向下弹出,但可以通过添加类 `.dropdown-menu-end` 实现向右下方弹出。示例代码展示了如何创建一个向右下方弹出的下拉菜单按钮,包含三个链接项。
|
3月前
|
移动开发
Bootstrap5 下拉菜单2
`.dropdown-header` 类用于在下拉菜单中添加标题,例如:`&lt;li&gt;&lt;h5 class=&quot;dropdown-header&quot;&gt;标题 1&lt;/h5&gt;&lt;/li&gt;`。`.active` 类可使选项高亮显示,`.disabled` 类可禁用选项。下拉菜单可通过添加 `.dropend` 或 `.dropstart` 类实现右对齐或左对齐。示例代码展示了如何使用这些类。
Bootstrap5 下拉菜单1
Bootstrap5 下拉菜单是可切换的上下文菜单,以列表形式显示链接。通过 `.dropdown` 类指定下拉菜单,按钮或链接需添加 `.dropdown-toggle` 和 `data-bs-toggle=&quot;dropdown&quot;` 属性。实际下拉菜单使用 `.dropdown-menu` 类,选项添加 `.dropdown-item` 类。`.dropdown-divider` 类用于创建水平分割线。
|
9月前
|
前端开发
Bootstrap 5 保姆级教程(八):卡片 & 下拉菜单
Bootstrap 5 保姆级教程(八):卡片 & 下拉菜单
N..
|
9月前
|
开发框架 前端开发 UED
Bootstrap下拉菜单与选项卡
Bootstrap下拉菜单与选项卡
N..
70 1
|
前端开发
Bootstrap 下拉菜单事件
Bootstrap 下拉菜单事件