L oop Через список и найти, если строка существует - PullRequest
0 голосов
/ 12 марта 2020

У меня есть список, который я пытаюсь пролистать. По сути, у меня есть файл XML с некоторыми полетами на них. Я пытаюсь увидеть, находится ли пользователь в файле XML, если он есть, и отобразить его обратно на странице JSP. Что происходит, только первые элементы в моем XML хранятся в переменных. Мне нужно иметь возможность просмотреть весь файл XML и посмотреть, существует ли пользовательский ввод. Например, исходя из того, что у меня сейчас есть, если я использую if (startLocation.equals(flight.getStartLocation()) && endLocation.equals(flight.getEndLocation())), он вернет только Лос-Анджелес, Калифорния для startLocation и Манчестер, NH для endLocation. Если пользователь переключает то, что находится в окне выбора, это не работает; как я уже говорил, он собирает только первый элемент полета.

FlightController. Java

@RequestMapping(value = "/submit-search", method = RequestMethod.POST)
    public String submitSearch(@RequestParam("name") String name, @RequestParam("startLocation") String startLocation, @RequestParam("endLocation") String endLocation,
            @RequestParam("date") String date, @RequestParam("passengers") Integer passengers, Model model) throws JAXBException, IOException {


        generateFlights();


        File file = ResourceUtils.getFile("classpath:flights.xml");

        try {
            JAXBContext context = JAXBContext.newInstance(FlightList.class);
            Unmarshaller un = context.createUnmarshaller();
            FlightList flightList = (FlightList) un.unmarshal(file);
            List < Flight > list = flightList.getFlights();
            for (Flight flight: list) {

                if (startLocation.equals(flight.getStartLocation()) && endLocation.equals(flight.getEndLocation()))
                {
                    model.addAttribute("startLocation", flight.getStartLocation());
                    model.addAttribute("endLocation", flight.getEndLocation());
                    model.addAttribute("date", flight.getDate());
                    return "ticketInfo";
                }
                else {
                    // Does not exist
                    return "invalidTicket";
                }


            }



        } catch (JAXBException e) {
            model.addAttribute("error", e.toString());
            return "error";
        }

        return null;
}

Flight. Java

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlRootElement(name="flight")
@XmlType(propOrder = { "startLocation", "endLocation", "date" })
public class Flight {
    // Create variables

    String startLocation;
    String endLocation;
    String date;


    // Getters and setters for Flight class

    @XmlElement
    public String getStartLocation() {
        return startLocation;
    }
    public void setStartLocation(String startLocation) {
        this.startLocation = startLocation;
    }
    @XmlElement
    public String getEndLocation() {
        return endLocation;
    }
    public void setEndLocation(String endLocation) {
        this.endLocation = endLocation;
    }
    @XmlElement
    public String getDate() {
        return date;
    }
    public void setDate(String date) {
        this.date = date;
    }


}

FlightList. java

import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class FlightList {

    // XmlElement sets the name of the entities
    @XmlElement(name = "flight")
    private List<Flight> flights;


    public void setFlights(List<Flight> flights) {
        this.flights = flights;
    }

    public List<Flight> getFlights() {
        return flights;
    }
}

рейсы. xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<flightList>
    <flight>
        <startLocation>Los Angeles, CA</startLocation>
        <endLocation>Manchester, NH</endLocation>
        <date>03-22-2020</date>
    </flight>
    <flight>
        <startLocation>Boston, MA</startLocation>
        <endLocation>Albany, NY</endLocation>
        <date>03-20-2020</date>
    </flight>
</flightList>

1 Ответ

0 голосов
/ 12 марта 2020

Я пытался, и он прекрасно работает для меня - я имею в виду разбор.

Что вы имели в виду под

Что происходит, только первые элементы в моем XML сохраняются в переменных.

Вот код, который я считаю работающим, как и ожидалось: https://github.com/Betlista/SpringTests/tree/master/FlightsXmlParsing

... как у меня в консоли:

b.s.f.SpringBootConsoleApplication       : Los Angeles, CA -> Manchester, NH [03-22-2020]
b.s.f.SpringBootConsoleApplication       : Boston, MA -> Albany, NY [03-20-2020]
...