2014-01-08 34 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})” –

相关问题