【问题标题】:In Grails, how to invoke a controller action from a g:select在 Grails 中,如何从 g:select 调用控制器操作
【发布时间】:2009-11-09 17:54:52
【问题描述】:

在我看来,我使用的是 g:select(实际上是 g:currencySelect)。

我希望在用户更改结果选择框中的值后立即触发控制器操作。

我该怎么做?

【问题讨论】:

    标签: grails controller


    【解决方案1】:

    我想我在这里回答了我自己的问题,但如果有更好的方法,请告诉我:

    在 select 标签中使用 onchange javascript 函数:

    <g:form controller="changeCurrency" action="changeCurrency">
        <g:select onchange="submit()"/>
    </g:form>
    

    【讨论】:

    • 假设我不必定义 submit() 的作用,这对我不起作用。
    • submit() 将提交表单。你没有定义 submit(),但是你需要一个对应的控制器来处理提交,在这个例子中会有一个 ChangeCurrencyController 和一个名为 changeCurrency() 的动作。
    • 对不起,如果您的表单中没有使用名称“submit”的其他内容,则 submit() 有效。我在 stackoverflow.com/questions/833032/… 的帮助下找到了我的错误
    • 如果我想调用不同的控制器方法来提交而不是 onChange 怎么办?
    【解决方案2】:

    另一种方式可以是:

    
        <g:select name="someName" from="${list}" onchange="goToPage(this.value)"/>
    
        <script type="text/javascript">
    
        function goToPage(requestParams){
        window.location.href="${createLink(controller:'controllerName' ,action:'actionName' ,params:[paramsName:""])}" + requestParams;
        }
    
        </script>
        

    【讨论】:

      【解决方案3】:

      如果你想要一个 ajax 请求,试试这个:

      <g:select name="type" from="${['import-a', 'import-b']}"
      onchange="jQuery('#addArea').load('/app/import/chooseImportType/' +
      jQuery('#type').val())"/>
      

      在控制器中:

      def chooseImportType (){
       render params.id
      }
      

      在 Grails 2.0.4 中工作

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多