使用<g:submittoremote> </g:submittoremote>更新Grails中的下拉值

时间:2010-09-07 03:23:39

标签: grails

我刚进入Grails舞台。

我有一个要求,我想在一个页面上放置一个下拉菜单和一个按钮,并且只需按下按钮即可更改下拉值,页面上的其他控件应保持不变。

我的代码如下:

_connType.gsp

<div id="mappedDeviceDiv">
    <select id="mappedDevice" name="mappedDevice" value="" style="width:200px">
    <g:each in="${deviceList}" status="i" var="dl">
        <option value="${dl}">${dl}</option>
    </g:each>
    </select>

    <g:submitToRemote class="blackButton" update="mappedDeviceDiv"
          url="${[controller:'resource',action:'getDeviceList']}"
          value="Get Devices"/>
</div>

ResourceController.groovy

def getDeviceList = {

    println "Getting NV devices.. + Nirmal" + params
    def model = buildAccessRequestModel()

    List<NVDeviceBean> deviceList = NVUtil.getDevices(params.datasource, null);
    Collections.sort(deviceList);
    List<String> devices = []
    for(NVDeviceBean deviceBean : deviceList) {
        devices.add(deviceBean.getName())
    }
    println "list = "+devices
    model.putAt('deviceList', devices)
    render (template:'config/connType',model:model)
}

因此,在上面的场景中,它在设备中完美地设置了值,但是在下拉的视图侧获取整个connType页面,而不是仅在控制器的设备变量中的列表值。

任何帮助都将受到高度赞赏..

1 个答案:

答案 0 :(得分:3)

您可能希望创建/修改其中一个控制器操作以返回HTML选项列表。你甚至可以让这个动作渲染一个模板。

def getDeviceOptions = {

    def options = []
    // code that creates the option list goes here.

    render(template:'config/optionList', model: [optionList: options ])
}

模板......

<!-- config/_optionList.gsp -->
<g:each in="${optionList}" status="i" var="dl">
    <option value="${dl}">${dl}</option>
</g:each>

然后,告诉g:submitToRemote标记更新选择对象。

<g:submitToRemote class="blackButton" update="mappedDevice"
      url="${[controller:'resource',action:'getDeviceOptions']}"
      value="Get Devices"/>

这应该让你开始朝着正确的方向前进。