4

私は Grails 開発に不慣れで、この問題を処理する標準的な方法が何であるか疑問に思っています。

GSP では、ドメイン オブジェクトのリストを繰り返し処理していますが、その多くが getX() メソッドを持っているわけではありません。次のようなタグが必要です。

<g:each in="${myObjects}>
  ${it.x}
</g:each>

ただし、一部のオブジェクトには getX メソッドがないため、「そのようなプロパティはありません」という例外が発生します。NPEを防ぐ「安全なオペレーター」のようなオペレーターがあればいいのにと思います。「instanceof」を実行せずにこれを処理する良い方法はありますか?

4

1 に答える 1

7

残念ながら、Groovy のオペレーターはここでは役に立ちません。安全なナビゲーション演算子 ( ?.)は、メソッドを呼び出したい参照が null になる可能性がある場合に役立ちます。Elvis 演算子 ( ?:)は、xプロパティがすべてのオブジェクトのプロパティである場合に役立ちますが、一部のオブジェクトでは null ( のようなものit.x ?: 'no x here') になる可能性があります。

この場合 -- さまざまなクラスのオブジェクトのコレクションで作業していると仮定します。それらのいくつかにはプロパティがありません --xオブジェクトにプロパティがあるかどうかを尋ねることができますx(オブジェクトが呼び出されるメソッドを実装している場合に注意してください)。 getX、その後it.hasProperty('x')真になります):

<g:each in="${myObjects}>
  ${it.hasProperty('x') ? it.x : 'no x here'}
</g:each>

'no x here'ビットをフォールバック値に置き換えます。また、両方のオプションのロジックが単純な式よりも複雑な場合は、三項演算子の代わりに<g:if>/タグを使用することを検討してください:)<g:else>

于 2012-04-22T19:32:30.527 に答える