2013-05-13 94 views
2

我想從控制器發送一些JS腳本到GSP視圖。 我做了以下嘗試。如何從控制器向GSP視圖發送Javascript代碼?

控制器(Purchase.groovy):

def myaction={ 
    flash.script= 'jQuery("div#header").show(1000);' 
    redirect(action:'edit') 
} 

購買/ myaction.gsp文件, 我試試下面的代碼

<g:if test="${flash.script !=null}"> 
    <g:javascript> 
    $(function() { 

      ${flash.script} 
    }) 
    </g:javascript> 
</g:if> 
<g:else> 
<g:javascript> 
    $(function() { 

      alert('Welcome') 
    }) 
    </g:javascript> 
</g:else> 

我也嘗試:jQuery.getScript('${flash.script}')代替'${flash.script}' 但是,GSP頁面總是呈現第二個腳本(else語句)

回答

4

首先,一定要在dom加載後調用函數; ü可以使用jQuery像

$(document).ready(function() { 
    call_function(); 
    }); 

而且你可以把js代碼形式控制器的地圖,而不是通過閃光燈和重定向到另一個動作。請看下圖:

def myaction={ 
    redirect(action:'edit', customJs: 'jQuery("div#header").show(1000);') 
} 

def edit={ 
    render view: 'someView', model:[customJs: customJs] 
} 

,並考慮:

<g:javascript> 
$(function() { 

     <%= customJs %> 
}) 

+1

在重定向中傳遞一個customJs作爲參數是一個安全漏洞/ XSS – 2013-05-13 11:38:40

1

flash.script是好的,我這裏測試和它的作品。會發生什麼是flash對象是用於轉換,並且僅在下一個請求中才可用。如果您的頁面被重定向到edit,並且您刷新了edit,那麼閃存將不再存在。例如:

  • 轉到myaction;
  • 流將重定向到編輯;
  • 如果刷新頁面,歡迎打印。
相關問題