Параметры отображения формы: выберите на основе другой формы: выберите выбор в jsp (Spring MVC) - PullRequest
0 голосов
/ 13 апреля 2020

Я ищу способ отображения параметров формы: выберите на основе значения, выбранного в другой форме: выберите. Если, например, у меня есть 3 класса: Водитель , Автомобиль , CompetitionCar :

public class Car {
    public String carId;
    public String nameId;
}


public class Driver {
    public String id;
    public String name;
    public Car car;
}

public class CompetitionCar {
    public String id;
    public Car car;
    public Driver driver;
}

В базе данных у меня есть несколько автомобилей и водители. Водитель может вести только определенные автомобили, которые также были добавлены в базу данных.

Контроллер Spring MVC будет:

@Controller
@RequestMapping(value = "/")
public class CompetitionController {

@Autowired
UtilFacade utilFacade;

@RequestMapping(value = "/getCompetitionCarForm", method = RequestMethod.GET)
public String competitionCarForm(Model model){
    List<Driver> drivers = utilFacade.getAllDrivers();
    List<Car> cars = utilFacade.getAllCars();
    CompetitionCar competitionCar = new CompetitionCar();

    model.addAttribute("drivers", drivers);
    model.addAttribute("cars", cars);
    model.addAttribute("competitionCar", competitionCar);

    return "competitionCarForm";
 }
}

И CompetitionCarForm. jsp:

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Display details</title>
</head>
<body>

<form:form action="${pageContext.request.contextPath}/addCompetitionCar" modelAttribute="competitionCar" method="post">

    <form:select path="car">
        <c:forEach items="${cars}" var="car">
            <form:option value="${car.carId}"/>
        </c:forEach>
    </form:select> <br>

    <form:select path="driver">
        <c:forEach items="${drivers}" var="driver">
            <c:if test="CONDITION">
                <form:option value="${driver.id}"/>
            </c:if>
        </c:forEach>
    </form:select> <br>

    <input type="submit" value="Add"/>
</form:form>
</body>
</html>

Теперь, допустим, я хочу добавить гоночную машину. Сначала я выбираю автомобиль в первой форме: выберите, и мне бы хотелось, чтобы во второй форме: выберите для отображения только тех водителей, которые могли управлять выбранным мной автомобилем.

Что я должен указать в «СОСТОЯНИИ» «? Я хотел бы что-то вроде test = "$ {driver.car.carId == selectedCarId}", где selectedCarId - это автомобиль, который я выбрал из первой формы: select.

Есть ли другая возможность сделать что-то подобное?

Заранее спасибо.

...