如何获取gsp页面中所选单选按钮的id值以grails控制器/域类

时间:2012-07-20 18:53:21

标签: grails gsp radiobuttonlist

使用:grails 1.3.7 fyi。

<g:each var="name" in="${nameList}">
 <li>${name.first}</li>
 <input id="Add" type="radio" name="nameMod" value="${name.first}"/>Add
 <input id="Modify" type="radio" name="nameMod" value="${name.first}"/>Modify
 <g:hiddenField name="action" value="${nameMod.id} "/>
</g:each>

所以这就是我要做的事情:我知道如何获得单选按钮的值,但是,我还需要知道按下了哪个按钮。从上面可以看到,我尝试将单选按钮的ID设置为操作(添加/修改),但是我收到一条错误,指出.id不是有效属性。我知道如何在jQuery中测试选择或不选择单选按钮,但我不确定如何将jQuery中的值传递给控制器​​或域类。

还有另一种方法吗?基本上我需要知道动作和名称,以便我可以更新数据库。

感谢您的任何建议! (我可以这么说吗?编辑!!;))

5 个答案:

答案 0 :(得分:2)

将一些类(仅在javaScript中使用)添加到单选按钮,然后使用它!

<g:each var="name" in="${nameList}">
 <li>${name.first}</li>
 <input id="Add" type="radio" name="nameMod" class="f_radioButtonGroup" value="${name.first}"/>Add
 <input id="Modify" type="radio" name="nameMod" class="f_radioButtonGroup" value="${name.first}"/>Modify
 <g:hiddenField name="action" value="${nameMod.id} "/>
</g:each>

和javaScript函数

function getCheckedItemNumber() {
    var result;
    var radioButtons = $(".f_radioButtonGroup");
    for (var i = 0; i < radioButtons.length; i++) {
        if (radioButtons[i].checked) {
            result = radioButtons[i].value;
        }
    }
    return result
}

答案 1 :(得分:1)

也许是这样的:

 <g:each var="name" in="${nameList}">
   <li>${name.first}</li>
  <input id="Add" type="radio" name="selectedAction" value="add"/>Add
  <input id="Modify" type="radio" name="selectedAction" value="modify"/>Modify
  <g:hiddenField name="nameMod" value="${name.first} "/>
 </g:each>

答案 2 :(得分:1)

您可能需要使用单选按钮名称进行更多操作,因为您正在迭代未知数量的名称。你可以在名为nameMod的组中拥有100个单选按钮 - 然后你只能选择这100个单选按钮中的一个 - 我认为这不是你想要的。

当我有这样的事情时,我就这样做了:

<g:each var="name" in="${nameList}">
  <li>${name.first}</li>
  <input type="radio" name="nameMod_${name.id}" value="add"/>Add
  <input type="radio" name="nameMod_${name.id}" value="modify"/>Modify
  <g:hiddenField name="name_${name.id}" value="${name.first} "/>
</g:each>

这将为每个名称提供一个无线电组,并允许您单独在控制器中访问它们。

答案 3 :(得分:1)

你可以用jQuery做到这一点,但这对于使用命令对象来说是个好例子:

查看:

<g:each var="name" in="${nameList}" status="i">
  <li>${name.first}</li>
  <input type="radio" name="nameAction[${i}]" value="add"/>Add
  <input type="radio" name="nameAction[${i}]" value="modify"/>Modify
  <g:hiddenField name="name[${i}]" value="${name.first} "/>
</g:each>

命令对象:

class NameCommand {
    List<String> nameAction = []
    List<String> name = []
}

控制器:

def theAction = { NameCommand foo ->
    foo.nameAction.eachWithIndex { val, index ->
        if (val == "add") {
            whateverService.add(foo.name[index]) 
        }
        else {
            whateverService.modify(foo.name[index])
        }
    }
}

答案 4 :(得分:0)

简单的方法: 只需在您的域类中声明名称为 selectedAction 的字符串(必须与gsp中单选按钮的名称匹配)。就是这样,GORM将负责绑定过程;所选单选按钮的值将放入selectedAction(域类字段)。

你只需要做那些事情。呼!