Java下拉回显案例如何实现

wen java案例 29

本文目录导读:

Java下拉回显案例如何实现

  1. 功能说明
  2. 案例实现
  3. 实现原理
  4. 运行步骤
  5. 其他常见回显方式

下面是一个Java下拉回显的简易案例实现,包含前端页面和后端代码。

功能说明

用户在页面下拉框选择一个选项后,提交到后台,后台将选中值重新回显到下拉框中。

案例实现

前端页面 (selectDemo.jsp)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">下拉回显案例</title>
</head>
<body>
    <h2>下拉框回显示例</h2>
    <form action="${pageContext.request.contextPath}/SelectServlet" method="post">
        <label>选择城市:</label>
        <select name="city">
            <option value="">-- 请选择 --</option>
            <option value="beijing" ${selectedCity == 'beijing' ? 'selected' : ''}>北京</option>
            <option value="shanghai" ${selectedCity == 'shanghai' ? 'selected' : ''}>上海</option>
            <option value="guangzhou" ${selectedCity == 'guangzhou' ? 'selected' : ''}>广州</option>
            <option value="shenzhen" ${selectedCity == 'shenzhen' ? 'selected' : ''}>深圳</option>
        </select>
        <br><br>
        <input type="submit" value="提交">
        <input type="button" value="重置" onclick="resetSelect()">
    </form>
    <%-- 显示回显信息 --%>
    <% if(request.getAttribute("message") != null) { %>
        <p style="color: blue; margin-top: 20px;">
            <%= request.getAttribute("message") %>
        </p>
    <% } %>
    <script>
        // 简单重置下拉框
        function resetSelect() {
            document.getElementsByName("city")[0].value = "";
        }
    </script>
</body>
</html>

后端Servlet (SelectServlet.java)

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 * 下拉回显处理Servlet
 */
@WebServlet("/SelectServlet")
public class SelectServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        // GET请求直接跳转到页面
        request.getRequestDispatcher("/selectDemo.jsp").forward(request, response);
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        // 获取用户选择的城市
        String selectedCity = request.getParameter("city");
        // 校验数据
        if (selectedCity != null && !selectedCity.isEmpty()) {
            // 将选中的城市放入request域
            request.setAttribute("selectedCity", selectedCity);
            // 根据选择生成提示信息
            String cityName = getCityName(selectedCity);
            request.setAttribute("message", "您选择了:" + cityName);
        } else {
            request.setAttribute("message", "请选择一个城市");
        }
        // 转发到JSP页面(回显)
        request.getRequestDispatcher("/selectDemo.jsp").forward(request, response);
    }
    /**
     * 根据value获取城市名称
     */
    private String getCityName(String value) {
        switch(value) {
            case "beijing": return "北京";
            case "shanghai": return "上海";
            case "guangzhou": return "广州";
            case "shenzhen": return "深圳";
            default: return value;
        }
    }
}

实现原理

  1. 前端JSP:使用EL表达式 ${selectedCity} 判断回显值,通过三元运算符 ? 'selected' : '' 给option添加selected属性

  2. 后端Servlet

    • 接收用户提交的城市值
    • 放入request作用域(request.setAttribute("selectedCity", selectedCity)
    • 转发到JSP页面
  3. 回显流程

    用户选择 → 提交表单 → Servlet处理 → 设置属性 → 转发JSP → 页面显示选中状态

运行步骤

  1. 将上述两个文件放入Java Web项目的对应目录
  2. 启动Tomcat等服务器
  3. 访问:http://localhost:8080/项目名/SelectServlet
  4. 选择一个城市并提交,即可看到下拉框回显效果

其他常见回显方式

方式1:使用JSTL标签(更简洁)

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<select name="city">
    <option value="">请选择</option>
    <option value="beijing" <c:if test="${selectedCity == 'beijing'}">selected</c:if>>北京</option>
    <option value="shanghai" <c:if test="${selectedCity == 'shanghai'}">selected</c:if>>上海</option>
</select>

方式2:后台直接处理(不推荐)

在Servlet中直接生成带selected的HTML字符串返回,但这种方式会破坏MVC分层,一般不使用。

这个案例实现了典型的下拉回显功能,你可以根据实际需求调整选项内容和业务逻辑。

抱歉,评论功能暂时关闭!