Spring mvc-来自数据库的下拉框选项

Posted

技术标签:

【中文标题】Spring mvc-来自数据库的下拉框选项【英文标题】:Spring mvc- dropdown box options from database 【发布时间】:2016-11-09 09:29:23 【问题描述】:

这是我为使用 spring mvc 创建下拉框而实现的。 这是有效的。但我需要在数据库记录中获取所有属于motherID="M-1" 的孩子。这只给了我第一个属于 M-1 的孩子。

我必须修复哪里?我是spring mvc的初学者。

my_children.jsp

<form method="post" >
            <div class="div_box">
                <select id="child_name" name="Child Name" >
                    <option value="top">Select your child</option>
                    <option value="">$firstName $lastName</option>

                </select>
                    <br>
            <div align ="justify">
            <button type="button" class="btn btn-success active">View Details</button>
           </div>
            </div>
    </form> 

控制器

@RequestMapping(value="/my_children", method = RequestMethod.GET)
public void viewMyChild(ModelMap modelMap) 
    ChildNameAccess childNameDAO = new ChildNameAccess();
    try
        Child child = childNameDAO.getChildDataByMotherId("M-1");


        modelMap.addAttribute("firstName",child.getFirstName());
        modelMap.addAttribute("lastName",child.getLastName());
    

    catch(SQLException e) 
        e.printStackTrace();
    
   

数据访问类

package com.emidwife.web.models.dataAccess;

import java.sql.ResultSet;
import java.sql.SQLException;

import com.emidwife.web.models.entities.Child;
import com.emidwife.web.models.utilities.Database;


public class ChildNameAccess 
    private Database connection = new Database();
    Child child = new Child();

    public Child getChildDataByMotherId(String motherID) throws SQLException 
        connection.openConnection();
        try
            ResultSet resultSet = connection.getData("SELECT * FROM childdetails WHERE MotherID=\'" + motherID + "\'");
            resultSet.next();
            //child.setChildId("1");
            child.setMotherId(resultSet.getString("MotherID"));
            child.setFirstName(resultSet.getString("FirstName"));
            child.setLastName(resultSet.getString("LastName"));
            //child.setDateOfBirth(resultSet.getDate("DOB"));

         catch (SQLException e) 
            e.printStackTrace();
        
        finally
            connection.closeConnection();
        

        return child;
    

【问题讨论】:

【参考方案1】:

主要问题不在于spring mvc。您必须从数据库中执行正确的选择语句。如果您想通过“M-1”获得所有孩子,您可以在 dataAccess 类中进行以下更改。

package com.emidwife.web.models.dataAccess;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.ArrayList;

import com.emidwife.web.models.entities.Child;
import com.emidwife.web.models.utilities.Database;


public class ChildNameAccess 
    private Database connection = new Database();

    public List<Child> getChildDataByMotherId(String motherID) throws SQLException 
        connection.openConnection();
        List<Child> children = new ArrayList<Child>();
        try
            ResultSet resultSet = connection.getData("SELECT * FROM childdetails WHERE MotherID=\'" + motherID + "\'");
            while(resultSet.next())
            Child child = new Child();
            child.setMotherId(resultSet.getString("MotherID"));
            child.setFirstName(resultSet.getString("FirstName"));
            child.setLastName(resultSet.getString("LastName"));
            children.add(child);
            
         catch (SQLException e) 
            e.printStackTrace();
        
        finally
            connection.closeConnection();
        

        return children;
    

你还必须像下面这样改变你的控制器。

@RequestMapping(value="/my_children", method = RequestMethod.GET)
public void viewMyChild(ModelMap modelMap) 
    ChildNameAccess childNameDAO = new ChildNameAccess();
    try
        List<Child> children = childNameDAO.getChildDataByMotherId("M-1");

        modelMap.addAttribute("children ",children);
    

    catch(SQLException e) 
        e.printStackTrace();
    
 

还有jsp:

<form method="post" >
            <div class="div_box">
                <select id="child_name" name="Child Name" >
                    <option value="top">Select your child</option>
                    <c:forEach items="$children" var="child">
                    <option value="">$child.firstName $child.lastName</option>
                    </c:forEach>
                </select>
                    <br>
            <div align ="justify">
            <button type="button" class="btn btn-success active">View Details</button>
           </div>
            </div>
    </form> 

【讨论】:

在此行的控制器中 List&lt;Child&gt; children = childNameDAO.getChildDataByMotherId("M-1"); 它给出错误“列表类型不是通用的。它不能用参数 '进行参数化。那是什么错误?我试图通过导入 java.util.List 来解决,但此时它将其标识为未使用的导入 你改变getChildDataByMotherId方法了吗? 我做了你建议的所有改变。 请检查您导入了哪个 List 类。它必须是 java.util.List List&lt;Child&gt; 改为java.util.List&lt;Child&gt;

以上是关于Spring mvc-来自数据库的下拉框选项的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 中枚举生成下拉框

下拉框 - 从 Spring MVC 模型/上下文到使用 freemarker 形成

将下拉菜单中的相关信息显示到文本框中(来自 SQL 数据库,使用 PHP、AJAX 和 HTML)

java spring MVC 用poi做Excel导入碰到一个问题,求大神指教,有关下拉框的问题

.NET MVC中给下拉框填充数据

HTTP 状态 405 - 不支持请求方法“POST”(Spring MVC)