从Grails中的Controller填充视图字段

时间:2011-11-16 23:17:41

标签: grails views controllers

我正在尝试将值加载到控件上的操作的视图上的字段中。如何引用我要加载的特定字段?在.NET中,它将类似于:在按钮单击事件中,this.txtName.Text =“John”。我不明白如何从控制器,特别是如何引用视图字段。我已经尝试过使用params对象,但它会变为null。我知道我正在根据我使用的println语句进行操作。

以下是相关的代码段:

从视图中看:

<td valign="top" class="value ${hasErrors(bean: planetInstance, field: 'name', 'errors')}">
  <g:textField name="name" value="${planetInstance?.name}"/>
</td>
<td class="load">
  <g:actionSubmit value="Load" action="nameLoad"/>
</td>

来自控制器:

def nameLoad = {
    // I want to reference and load the "name" textField from the view
}

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

您应该能够使用params.name访问文本字段的值。如果这不起作用,您的视图可能有问题。 g:textFieldg:actionSubmit中是否包含formg:form标记?

答案 1 :(得分:0)

我无法从您的代码中了解到,但您可能忘记在控制器操作name中映射变量nameLoad

class YourController{    
    def nameLoad = {
        def name = Planet.get(params.id).name //This can be whatever you need it to be to get the correct value assigned to the "name" variable.  Here I assume you have a domain class called "Planet" which may or may not be the case.
        return [name:name] //This is where you map key/value pairs.  The name of the key is what you will type to access the value in your view.  The value is the name of the variable you are dealing with, in this case "name".
    }
}

通过设置上述代码的方式,Grails将假设文件夹nameLoad中有一个名为YourController的视图。所以URL将是这样的:

http://localhost:8080/yourapp/yourcontroller/nameload

在该视图中,您将访问name,如下所示:

${name}

可以在任意数量的标签中使用,例如<g:select>标签:

<g:select from="${name}" />