2014-01-08 103 views
0

我是一個嘗試在Grails上尋找Neo4J的用戶的新手。如何發送Javascript變量到Grails控制器來查詢Neo4J

基本上,我通過Neo4J瀏覽器製作了20個食品雜貨店節點,我想創建一個簡單的Grails網站,讓用戶搜索食品雜貨並直觀地顯示與其相關的商品。

我index.gsp中有:

<input id="item" /> 

我viz.js有:

$('#item').keyup(function() { 
var item = $('#item').val(); 

我的項目域類已經

class Item { 
static mapWith = "neo4j" 
String name 

我ItemController類有:

def index() { 
def item = Item.list() [item:item] //No idea, just trying out whatever i find :( 

並且用類似的查詢:

def query = Item.cypherStatic ("""start n=node({Item}) match (n)-[r]->(x) where r='partner' return n, x) 

問題:

  1. 我怎樣才能正確地發送JS '項目' 可變進ItemController?
  2. 如何使用'item'變量來正確查詢與該項目有'夥伴'關係的節點名稱?

回答

0

設定的項目,以隱藏字段,然後就可以直接在你的控制器使用PARAMS

在這裏你去訪問它:

//in index.gsp add below hidden field and set the hidden filed in your js code 
    <g:hiddenField name="item" value="" /> 

    $('#item').keyup(function() { 
    var item = $('#item').val(); 

    //in your controller 
    def index() { 
    def item = params.item 
    print item // you see the value for item 
    //do your stuff 
    } 

一旦你有項目價值,你可以直接使用HQL查詢或使用域實例

希望這可以幫助你

問候
Motilal

+0

隱藏字段是訪問變量的要求嗎?我發現了一個不需要隱藏字段的類似問題:http://stackoverflow.com/questions/7020519/how-to-get-the-input-from-a-text-box-on-a-webpage-form –

+0

是的,隱藏字段是必需的:在您的代碼中,您不直接將值分配給文本字段。 – Motilal

1

除了Motilals答案,你definetly需要的包裝形式與指向您的控制器動作

<g:form controller="itemController" action="index" > 

    <input type="text" id="item" name="item" value="" /> 
    <input type="submit" value="submit" > 
</g:form> 

然後點擊提交了將調用索引操作,有你可以解析這個值

def item = params.item 

但它看起來更像是你想要一些異步的東西在keyup -f之後結,因此你可以做某事是這樣的:在這種情況下

$('#item').keyup(function() { 
    var item = $('#item').val(); 

    $.ajax({ 
     url: "${createLink(controller:'itemController', action:'index')}", 
     data:"&item="+item 
     }) 
    .done(function(data) { 
     console.log(data) 
    }); 
}); 

,你需要注意你的索引操作就返回,這樣你就可以在中,.done(做)任何你想要的響應。

也注意到,當你命名的動作「指數」也將可在

.../myproject/item/index 

或者,並且那重要

.../myproject/item/ 

,所以如果你的索引方法需要從數據輸入,如果用戶直接訪問該網址,則會錯過它們

因此,您的索引操作寧願使用輸入 來呈現頁面,而您定義e另一個基於輸入和返回數據執行查詢的動作

+0

謝謝,我把它放在一個表單中,但避免了異步的東西,因爲它有點嚇人。我能夠將變量放入def項中,但我仍然堅持如何將它發送到Neo4J密碼查詢。 –

+0

嘗試用「($ {item})」替換「({Item})」 –

相關問題