проблема с разбором XML с граалями - PullRequest
1 голос
/ 15 июня 2011

Я разрабатываю приложение, которое извлекает информацию о музыкальных событиях из Last.fm API. Однако по какой-то причине приложение анализирует только первые два события из файла XML, и я не могу понять, почему. Любая помощь?

Это код:

def resultList = []

    if(connection.responseCode == 200){
        def xml = connection.content.text
        def lfm = new XmlSlurper().parseText(xml)
        lfm.events.event.each {
            def result = [:]
            result.eventId = it.id as String
            result.eventTitle = lfm.events.event.find { it.'id' == result.eventId }.title as String

            resultList << result

        }

1 Ответ

0 голосов
/ 16 июня 2011

Я только что обнаружил, что ошибка заключалась в закрытии save {} класса Controller.Ниже приведен код ошибки:

def save = {
    resultsList.each{
        def eventInstance = new Event(params + it)
        if (eventInstance.save(flush: true)) {
            flash.message = "${message(code: 'default.created.message', args: [message(code: 'event.label', default: 'Event'), eventInstance.id])}"
            redirect(action: "show", id: eventInstanceID)
        }
        else {
            render(view: "create", model: [eventInstance: eventInstance])
        }
    }
}

Итак, проблема заключалась в том, что я перенаправлял действие "show" внутри каждого закрытия {}.И по какой-то причине, в которой я до сих пор не уверен, это вызывало исключение после второй итерации каждого цикла {}.Поэтому все, что мне нужно было сделать, это вызвать метод redirect вне каждого замыкания {}, например:

   def save = {
    def resultsList = eventService.lastFmVenues(params.artist)
    def eventInstanceID
    resultsList.each{
        def eventInstance = new Event(params + it)
        if (eventInstance.save(flush: true)) {
            flash.message = "${message(code: 'default.created.message', args: [message(code: 'event.label', default: 'Event'), eventInstance.id])}"
            eventInstanceID = eventInstance.id
        }
        else {
            render(view: "create", model: [eventInstance: eventInstance])
        }
    }
    redirect(action: "show", id: eventInstanceID)
}

Мне все еще интересно, почему он вызывал исключение только после второй итерации, но в любом случае, проблема решена.Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...