помочь с oauthService и linkedin - PullRequest
       15

помочь с oauthService и linkedin

0 голосов
/ 09 сентября 2011

Я пытаюсь перебрать список параметров в контроллере grails.когда у меня есть список, длина которого превышает один элемент, например:

     [D4L2DYJlSw, 8OXQWKDDvX]

, следующий код работает нормально:

def recipientId = params.email
recipientId.each { test->
     System.print(test + "\n")  
}

Вывод:

  A4L2DYJlSw
  8OXQWKDDvX

Но если в списке есть только один элемент, выводом будет не единственный элемент, а каждая буква в списке.например, если мой список параметров:

 A4L2DYJlSwD

с использованием того же кода, что и выше, вывод будет:

 A
 4
 L
 2
 D
 Y
 J
 l
 S
 w

Может кто-нибудь сказать мне, что происходит и что я делаюне так?

спасибо

Джейсон

Ответы [ 4 ]

1 голос
/ 10 сентября 2011

Я бегу с той же проблемой некоторое время назад! Мое решение для этого было

def gameId = params.gameId
def selectedGameList = gameId.class.isArray() ? Game.getAll(gameId as List) : Game.get(gameId);

потому что в моем случае я получал 1 или более идентификаторов игр в качестве параметров!

То же самое можно сделать:

def recipientId = params.email
if(recipientId.class.isArray()){
 // smtg
}else{
  // smtg
}

Потому что здесь происходит следующее: как только вы вызываете '.each', превращайте этот объект в список! а 'String AS LIST' в groovy означает char_array этой строки!

0 голосов
/ 11 сентября 2011

Grails предоставляет встроенный способ гарантировать, что определенный параметр является списком, даже если был отправлен только один. Это на самом деле предпочтительный способ получить список элементов, когда количество элементов может быть 0, 1 или более:

def recipientId = params.list("email")
recipientId.each { test->
     System.print(test + "\n")  
}

Объект params обернет один элемент в список или вернет список, если их несколько.

0 голосов
/ 10 сентября 2011

Вы также можете попробовать вот так:

def recipientId = params.email instanceof List ? params.email : [params.email]
recipientId.each { test-> System.print(test + "\n") }

Он будет обрабатывать оба случая ..

0 голосов
/ 10 сентября 2011

Мое предположение (из того, что я видел в groovy где-то еще), заключается в том, что он пытается выяснить, каким должен быть тип для recipientId, поскольку вы его не указали (и, следовательно, он динамический).

В вашем первом примере groovy решил, что то, что было передано закрытию .each{}, было List<String>. Второй пример, поскольку существует только один String, groovy решает, что тип должен быть String, а .each{} знает, как перебирать и String - он просто конвертирует его в char[].

Вы могли бы просто сделать recipientId a List<String> Я думаю, что в этом случае.

...