0

私は過去3週間Grailsを使用しています(学習と作業)。私はJSP/サーブレットアプリケーションのGrailsへの移植に取り組んでおり、アプリケーションの移植は絶対に「楽しい」ものでした。

私は問題に直面し、検索、読書をしていますが、まだ解決できませんでした。

GSPページには、ユーザーがProductIDを入力するテキストフィールドと検索ボタンがあります。検索ボタンがクリックされたときにjQueryAjaxメソッドから呼び出されるコントローラーがあります。

// -----jQueryAjax呼び出しの一部---
$ .ajax({
        タイプ:「投稿」、
        url:'/ $ {grailsApplication.metadata ['app.name']} / product / checkProductAjax'、
        データ: "pid =" + proID、

//-----コントローラーコード-----
クラスProductController{
      def足場=true    
          def checkProductAjax = {
                 def product = Product.findByProductId(params.pid)
                if(product){
                     [product:product]//GSPページでデータを取得するためのモデル。                  
                      render(product.toString()+ ":" + product.id)
                } そうしないと {
                    render( "none")
                }
          }
}

Ajax呼び出しとすべてが正常に動作します。私が直面している問題は、モデルを取得する方法です(つまり、製品データをGSPページに戻し、[製品:製品]をGSPに表示します。たとえば、製品名:$ {product}

どうすれば動作させることができますか?モデル[product:product]を設定するだけで、GSPのデータを取得できると言われている例を読みました。

製品名:$ {product}はGSPページで常に空白で表示されます製品名:

私が間違っていることを教えてください。

乾杯!ジェイ・チャンドラン

4

2 に答える 2

2

[product: product]render(product.toString() + ":" + product.id)互換性がありません。最後の行がこのようなマップであるコントローラーアクションを表示する[product: product]と、アクションクロージャーの最後のステートメントであるため、暗黙の戻り値になります。これは、と同等ですreturn [product: product]。ただし、メソッドの途中にマップがある場合は、作成されて破棄されます。それはほとんど同等です

def ignoreThisMap = [product: product]
// other code

ただし、Ajax呼び出しを行っているため、GSPを再レンダリングする予定がないため、製品をモデルに配置しても意味がありません。テキスト、JSON、XML、またはクライアント側のJavaScriptがhtmlのサブセットを更新するために使用するその他のコンテンツをレンダリングします。だからあなたはおそらくもっと近いものが欲しいでしょう

if (product) {
   render product as JSON
}
else {
   render "none"
}

次に、jQueryまたはPrototypeを使用してJSONを評価し、JavaScriptでデータを抽出できます。

于 2010-09-01T05:32:57.327 に答える
0

このタイプの作業用に作成されたgrailsタグを使用することをお勧めします。AJAXコードをすべてラップします

http://www.grails.org/Ajax

于 2010-09-01T04:14:15.587 に答える