【问题标题】:Grails form g:textField parameters to ControllerGrails 表单 g:textField 参数到控制器
【发布时间】:2017-12-04 17:19:11
【问题描述】:

我对 Grails 很陌生,我已经修改了一些以前存在的按钮功能,以便它现在应该向控制器发送 2 个参数。在this tutorial 的帮助下,我写了:

gsp

<div class="modal fade" id="myModal" role="dialog">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header"><button type="button" class="close" data-dismiss="modal">&times;</button><h4 class="modal-title">Some Title</h4></div>
            <div class="modal-body">
                <g:form>
                    <div class="input-group">
                        <span class="input-group-addon">Parameter 1</span>
                        <g:textField name="parameter1" size="24" class="form-control" />
                    </div>
                    <div class="input-group">
                        <span class="input-group-addon">Parameter 2</span>
                        <g:textField name="parameter2" size="24" class="form-control" />
                    </div>
                    <g:actionSubmit action="myAction" value="Go" class="btn btn-success"
                                    data-toggle="tooltip" data-placement="top"
                                    title="${grailsApplication.config.myTitle}" />
                </g:form>
            </div>
        </div>
    </div>
</div>

我的控制器

// Though it is not mentioned in the tutorial, I've added 2 class properties.
// Otherwise I'd get a groovy.lang.MissingPropertyException
def parameter1
def parameter2

def myAction = {
    doSomething(parameter1, parameter2)
}

// previously : 
// def myAction = {
//     doSomething()
// }

调用该方法时,这两个参数为'null'。我该怎么做才能使正在处理的参数到控制器方法?

文件名、导入和类似的东西不应该是这里的问题,因为函数的调用在没有参数的情况下很好。模态对代码来说是新的,因为它用于获取参数 1 和参数 2 的值。只要参数不在控制器方法的签名中,模态本身就可以很好地工作。

我根据this answer 尝试了“grails clean”。 Grails 2.5.4 版

【问题讨论】:

    标签: grails controller


    【解决方案1】:

    试试这个

    // def parameter1 // you do not need this
    // def parameter2 // you do not need this
    
    def myAction = {
        doSomething(params.parameter1, params.parameter2)
    }
    

    【讨论】:

    • 这个问题的准确答案。谢谢!
    【解决方案2】:

    我不确定确切的版本,但是从 grails 2.x 开始,您必须使用方法来定义控制器的操作,而不是闭包。这段代码应该可以工作

    def myAction() {
        doSomething(params.parameter1, params.parameter2)
    }
    

    或者可能是这样,假设两个参数都是字符串

    def myAction(final String parameter1, final String parameter2) {
        doSomething(parameter1, params)
    }
    

    在您共享表单的示例中,没有定义目标操作,因此您应该使用 post 方法转到当前操作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-01
      • 1970-01-01
      相关资源
      最近更新 更多