Как получить доступ к переменной из двух классов в цикле JSP

#java #jsp #spring-mvc #collections

#java #jsp #spring-mvc #Коллекции

Вопрос:

У меня есть два класса:

  public Car
      Integer number;
      String  name;

  public Parking
      Integer parkingNumber;
      String address;
  

Я отправил в свой JSP один список парковки и один список автомобилей

  List<Parking> parkingList= new ArrayList<Parking>();
 List<Car> carList= new ArrayList<Car>();
  

но полная значений (они не важны для примера)

 Model.addAttribute("parkingList", parkingList);
Model.addAttribute("carList", carList);`
  

Как я могу получить доступ внутри цикла (foreach) к автомобилю-> название автомобиля с car-> номер = определенная парковка-> parkingNumber (предположим, например, что это 5)?

    <c:forEach items="${parkingList}" var="park" varStatus="status"> 
       <p> $carList[park.parkingNumber=5].name</p>
  </c:forEach>
  

Правильно ли это?
К сожалению, я не могу использовать другой Foreach, потому что car.name значение должно быть записано на странице только один раз.

Комментарии:

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

2. Проблема в том, что при добавлении другого foreach у меня будет более одного <p>car.name </p> пока мне нужно, чтобы она печаталась только один раз

3. Это тоже не может этого сделать… для моего проекта мне нужно проверить, что внутри jsp, к сожалению

Ответ №1:

Приведенная ниже строка в вашем коде кажется неверной

  <p> $car[park.parkingNumber=5].name</p>
  

Потому что вы устанавливаете значения ниже в модели

 Model.addAttribute("parkingList", parkingList); 
Model.addAttribute("car", car);
  

где вы помещаете один объект Car в модель и пытаетесь получить к нему доступ как к массиву $car[park.parkingNumber=5].name

Вы можете прямо сказать car.name

Комментарии:

1. Спасибо, вы полностью правы. Извините, но это мне не поможет. Что я действительно пытался понять, так это как получить доступ в случае, если я отправил в JSP список карлов, подобный списку парковки. Теперь я редактирую свой вопрос.

2. Я не совсем понимаю ваш вопрос Как я могу получить доступ внутри цикла (foreach) к автомобилю-> название автомобиля с car-> номер = определенная парковка-> parkingNumber (предположим, например, что это 5) ? . Можете ли вы правильно это объяснить?

3. Я хочу получить доступ к переменной car name для ее печати в jsp, но только в том случае, если переменная car number равна переменной parkingNumber класса parking @Sachin Mesare. К сожалению, я должен выполнить эту проверку внутри JSP, и я не знаю как..

4. вы можете добавить еще один цикл for внутри него, а затем добавить проверку для car.number

5. К сожалению, мне приходится печатать значение в JSP внутри <p> </p> только один раз …. если я добавлю еще один цикл, он будет записан более одного раза @Sachin Mesare

Ответ №2:

Попробуйте это,

 <c:forEach items="${parkingList}" var="park" varStatus="parkStatus"> 
   <c:forEach items="${carList}" var="car" varStatus="carStatus"> 
      <c:if test="car.number eq park.parkingNumber">
         <p><c:out value="car.name" /></p>
      </c:if>
   </c:forEach>
</c:forEach>
  

или

Если вы не хотите использовать несколько foreach циклов на стороне сервера, вы можете использовать Car класс в Parking классе, например,

 public Parking
  Integer parkingNumber;
  String address;
  List<Car> carList = new ArrayList<>();
  

И поместите Car список в Parking объект, где все автомобили имеют тот же номер, что и parkingNumber.

 for(Parking parking : parkingList) {
  for(Car car : carList) {
    if (car.getNumber() == parking.getParkingNumber()) {
      parking.getCarList().add(car);
    }
  }
}
  

Затем вам нужно просто повторить это один раз, и вы получите все автомобили с одинаковым номером парковки.

 <c:forEach items="${parkingList}" var="park" varStatus="parkStatus"> 
   <c:forEach items="${park.carList}" var="car" varStatus="carStatus"> 
      <p><c:out value="car.name" /></p>
   </c:forEach>
</c:forEach>