如何在grails中调用函数

时间:2014-12-22 14:44:56

标签: grails groovy

我是初学者。所以请耐心等待。我有一个域类,一个控制器和一个服务。我创造了两种方法;一个获取列表,另一个是获取参数并返回参数以检查它是否接受值。但我不知道如何调用该功能。因为我曾经输入localhost:8080 / projectname / controllername / methodname。它返回404视图未找到。 这是代码 包是testone

域:ReadData.groovy

package testone
import grails.rest.*;
class ReadData {
String customername;
    String fathername;
    static constraints = {
        customername blank: false;
        fathername blank:false;
    }
}

控制器:ReadDataController.groovy

package testone

import grails.converters.JSON

import static org.springframework.http.HttpStatus.*
import grails.transaction.Transactional

@Transactional(readOnly = true)
class ReadDataController {

    static responseFormats = ['json', 'xml']
    static allowedMethods = [save: "POST", update: "PUT", delete: "DELETE"]
    def ReadDataService readDataService;

    def index(Integer max) {

        params.max = Math.min(max ?: 10, 100)
        respond ReadData.list(params), [status: OK]
    }


    @Transactional
    def save(ReadData readDataInstance) {
        if (readDataInstance == null) {
            render status: NOT_FOUND
            return
        }

        readDataInstance.validate()
        if (readDataInstance.hasErrors()) {
            render status: NOT_ACCEPTABLE
            return
        }

        readDataInstance.save flush:true
        respond readDataInstance, [status: CREATED]
    }

    @Transactional
    def update(ReadData readDataInstance) {
        if (readDataInstance == null) {
            render status: NOT_FOUND
            return
        }

        readDataInstance.validate()
        if (readDataInstance.hasErrors()) {
            render status: NOT_ACCEPTABLE
            return
        }

        readDataInstance.save flush:true
        respond readDataInstance, [status: OK]
    }

    @Transactional
    def delete(ReadData readDataInstance) {

        if (readDataInstance == null) {
            render status: NOT_FOUND
            return
        }

        readDataInstance.delete flush:true
        render status: NO_CONTENT
    }
    def readList(){
        readDataService.testList();
    }
    def getName(String name){
        render name;
    }
}

服务:ReadDataService.groovy

package testone

import grails.transaction.Transactional

@Transactional
class ReadDataService {

    def serviceMethod() {

    }
    def testList(){
        return ReadData.list();
    }
}

自举:

import testone.ReadData

class BootStrap {

    def init = { servletContext ->
         new ReadData(customername: 'NameOne',fathername: 'FnameOne').save();
        new ReadData(customername: 'NameTwo',fathername: 'FnameTwo').save();

    }
    def destroy = {
    }
}

请帮我调用这些函数或直接告诉我使用服务方法的方法。我想在Android应用程序中使用grails服务。

3 个答案:

答案 0 :(得分:0)

您确定,您已为 readList 方法创建了一个视图?

答案 1 :(得分:0)

您正在从控制器readList操作返回一个列表。尝试传递像

这样的地图
['testList':readDataService.testList()]

并且如前一个人所说,检查您是否有视图。否则,如果你想将JSON传递给你的Android应用程序,你应该添加

 render readDataService.testList() as JSON 

readList行动结束时。

答案 2 :(得分:0)

您已设置允许调用的方法: static allowedMethods = [save:“POST”,update:“PUT”,delete:“DELETE”] 基本上是方法

  • 保存将通过帖子提供(表格提交,例如。)
  • 更新将通过http PUT方法提供(在浏览器中不可用)
  • 通过DELETE方法删除avalaible(与之前相同)

所以你应该添加你想要调用的所有方法,例如

allowedMethods = [readList:[“GET”,“POST”],保存:“POST”,更新:“PUT”,删除:“删除”]

参考:https://grails.github.io/grails-doc/latest/ref/Controllers/allowedMethods.html