0

Grails変換を目指して、既存のアプリケーションをGrailsとGroovyに変換し始めました。それは非常にうまく機能しますが、選択タグの変換で行き詰まります。

私はドメインクラスを持っています:

package todo

  class Person {

    String ssn
    String firstname
    String familyname
    String role
    String emailname
    String emailserver
    ...

新しい「todo」タスクを作成するとき、所有者は開発者であるシステム内の人から割り当てられる可能性があり、私はこれを機能させます(PHPからのかなり直接的な翻訳):

<select id="owner" name="owner">
  <option>Noboby ...</option>
  <g:each in="${Person.list()}">
    <g:if test="${it?.role=='developer'}">
      <option value="${it?.id}">${it?.firstname} ${it?.familyname}</option>
    </g:if>
  </g:each>
</select>

しかし、それをもっと「Grailsっぽい」ものにしようとする試みはすべて失敗します。どのようにしてGrailsv2.2.1コードに成形できますか?私は何時間も読んだり、試したり、失敗したりしました。

4

3 に答える 3

2

より多くのGrailsスタイルにしたい場合は、ビュー内ではなくcontrollers\内ですべてのロジックを実行する必要がservicesあります。

createTodoフォルダpersonとにビューがあると仮定して、次のようにアクションPersonControllerを変更します。createTodo

class PersonController {
    def createTodo() {
        def developers = Person.findAllWhere(role: 'developer')
        [developers: developers, ... /* your other values */]  
    }
}

したがって、ビューでデータベース操作を処理する必要はありません。

次のステップは、次のようにg:selectタグを使用することです。

<g:select name="owner" from="${developers}" optionValue="${{'${it.firstName} ${it.familyName}'}}" noSelection="['null':'Nobody ...']" optionKey="id" value="${personInstance?.id}" />
于 2013-03-20T09:58:09.920 に答える
1

このコードを試してください:

<g:select optionKey="id" from="${Person.findAllByRole('developer')}" optionValue="${{it.fullName}}" value="${yourDomainInstance?.person?.id}" noSelection="['null':'Nobody']"></g:select>

そしてあなたのクラスでは:

class Person {
....
String getFullName(){
   it?.firstname+' '+ it?.familyname
}

static transients = ['fullName']
....
}

詳細については、 g:selectタグを参照してください。

于 2013-03-20T09:54:50.800 に答える
0

最後に、私はそれを私が望むように動作させました、そしてそれは@ "Mr.Cat"ソリューションに従って(ほぼ)動作します。ただし、「それ」はクラスに存在しないため、getFullNameメソッドは次のようになります。

String getFullName(){
   this?.firstname+' '+ this?.familyname
}

稼働中、すべての助けに感謝します。

于 2013-03-22T15:45:41.487 に答える