如何将Javascript变量发送到Grails控制器以查询Neo4J

时间:2014-01-08 10:12:36

标签: grails neo4j

我是一个新手试图在Grails上找到Neo4J的用途。

基本上,我通过Neo4J浏览器制作了20个杂货商品节点,我想创建一个简单的Grails网站,让用户搜索杂货商品并直观地显示与之相关的商品。

我的index.gsp有:

<input id="item" />

我的viz.js有:

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

My Item Domain类

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'item'变量发送到ItemController?
  2. 如何使用'item'变量正确查询与项目具有“合作伙伴”关系的节点名称?

2 个答案:

答案 0 :(得分:1)

除了Motilals的答案之外,你绝对需要一个带有指向你的控制器的动作的包装形式

喜欢

 <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-function之后想要一些异步的东西,所以你可以这样做:

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

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

在这种情况下,您需要注意索引操作返回的内容,因此您可以使用响应在.done()中执行任何操作。

另请注意,当您将动作命名为“index”时,它将在

处提供
 .../myproject/item/index

或者,这很重要

.../myproject/item/

因此,如果您的索引方法需要来自输入的数据,如果用户直接访问该网址,它将会错过它们

因此您的索引操作宁愿使用输入呈现页面 并根据输入和返回数据定义另一个执行查询的操作

答案 1 :(得分:0)

将项目设置为隐藏字段,然后您可以使用参数

直接在控制器中访问它

你去:

 //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