1

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

class Template {
  String name;
  String prop1;
  String prop2;
}

g:select で表示:

<g:select name="template.id" from="${Template.list()}" optionKey="id" onclick = "updateEditText(this.value);"/>

選択したオブジェクトを g:select 値 (文字列ではない) に設定する必要があります。次のようにする必要があります (ただし、機能していません)。

<g:select name="template.id" from="${Template.list()}" optionKey="id" optionValue = "${it}" onclick = "updateEditText(this.value);"/>

*it - template.list() のオブジェクト

私のプロシージャupdateEditTextは、選択したオブジェクトからすべてのプロパティを取得する必要があります:

<g: javascript>
   updateEditText(obj) {
      document.getElementByID("prop1").value = obj.prop1;
      document.getElementByID("prop2").value = obj.prop2; //etc
   }
</g:javascript>

オプション値に「prop1」または「prop2」を使用すると正常に動作しますが、必要なものではありません。誰でも私を助けることができますか?

4

1 に答える 1

0

html入力からjavascriptにオブジェクトを渡すことはできません。ただし、remoteFunctionタグを使用して、選択したIDをサーバーに渡すことができます。サーバーでは、オブジェクトが取得され、プロパティが返されます。このような:

<g:select name="template.id" from="${Template.list()}" optionKey="id" 
          onchange="${remoteFunction(action: 'getProps', 
          params:'\'id=\' + escape(this.value)',
          update: 'props')}"/>
<div id="props">Properties here</div>

コントローラでインスタンスを取得し、次のようにプロパティをレンダリングします。

def getProps() {
    def obj = Template.get(params.id)
    render("""<div id="prop1">prop1 = ${obj.prop1}</div>
              <div id="prop2">prop2 = ${obj.prop2}</div>
           """)
}
于 2012-12-14T07:30:33.653 に答える