0

Grailsコントローラーで、パラメーターのリストを反復処理しようとしています。次のように、複数の要素を含むリストがある場合:

     [D4L2DYJlSw, 8OXQWKDDvX]

次のコードは正常に機能します。

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

出力は次のとおりです。

  A4L2DYJlSw
  8OXQWKDDvX

ただし、リストに項目が 1 つしかない場合、出力は項目だけではなく、リスト内の各文字になります。たとえば、私の params リストが次の場合:

 A4L2DYJlSwD

上記と同じコードを使用すると、出力は次のようになります。

 A
 4
 L
 2
 D
 Y
 J
 l
 S
 w

誰が何が起こっているのか、何が間違っているのか教えてもらえますか?

ありがとう

ジェイソン

4

4 に答える 4

1

私は少し前に同じ問題を抱えています!それに対する私の解決策は

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

私の場合、パラメーターとして 1 つ以上のゲーム ID を取得していたからです!

できることは同じです:

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

ここで何が起こっているかというと、'.each' を呼び出すとすぐに、そのオブジェクトがリストにグルーヴィーに変換されます! groovy の 'String AS LIST' は、その文字列の char_array を意味します!

于 2011-09-09T20:52:38.953 に答える
0

Grails には、特定のパラメーターがリストであることを保証する組み込みの方法が用意されています。これは実際には、アイテムの数が 0、1、またはそれ以上の場合にアイテムのリストを取得するための推奨される方法です。

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

オブジェクトは、単一のparams項目をリストとしてラップするか、複数ある場合はリストを返します。

于 2011-09-11T08:20:18.277 に答える
0

次のように試すこともできます。

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

それは両方のケースを処理します..

于 2011-09-10T04:43:38.747 に答える
0

私の推測では (他の場所で groovy で見たものから)、型をrecipientId指定していないため (つまり動的であるため)、型がどうあるべきかを理解しようとしているということです。

.each{}最初の例では、groovy はクロージャーに渡されたものがList<String>. 2 番目の例では、 が 1 つしかないためString、groovy は型が であるべきであると判断String.each{}、 a を反復処理する方法も知っています。String単に a に変換するだけchar[]です。

recipientIdこの場合、単にList<String>I think を作成できます。

于 2011-09-09T20:24:03.673 に答える