Grails:<g:选择

WaZ*_*WaZ 4 grails

我怎样才能实现以下目标:

我有一个存储在我的域中的布尔值,默认情况下Grails创建一个复选框作为控件.我想要一个具有值的选择控件:Active/Inactive.在选择Active值时True应该传递并且选择InActiveFalse应该传递.

我怎样才能实现这一目标

<g:select name="status" from="" optionKey="" value=""  />
Run Code Online (Sandbox Code Playgroud)

非常感激.

Ces*_*sar 8

我不知道这是否是最好的方法,但你可以有一个枚举来完成这项工作:

public enum SelectOptions{
    ACTIVE(true, 'Active'),
    INACTIVE(false, 'InActive')

    Boolean optionValue
    String name

    SelectOptions(boolean optionValue, String name){
        this.optionValue = optionValue
        this.name = name
    }

    static getByName(String name){
        for(SelectOptions so : SelectOptions.values()){
            if(so.name.equals(name)){
                return so;
            }
        }
        return null;
    }

    static list(){
        [ACTIVE, INACTIVE]
    }

    public String toString(){
        return name
    }
}
Run Code Online (Sandbox Code Playgroud)

将SelectOptions枚举的实例添加到您的域:

class MyDomain {
    SelectOptions selectOptions = SelectOptions.ACTIVE
    //Other properties go here

    static constraints = {
        selectOptions(inList:SelectOptions.list())
        //other constraints
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在您的GSP视图中:

<g:select
    name="status"
    from="${myDomainInstance.constraints.selectOptions.inList}"
    value="${myDomainInstance.selectOptions}" />
Run Code Online (Sandbox Code Playgroud)

在控制器的save方法中,您需要从视图提交的String值中获取正确的枚举:

def save = {
    SelectOptions selectOption = SelectOptions.getByName(params.status)
    def myDomainInstance = new MyDomain(params)
    myDomainInstance.selectOptions = selectOption
    // proceed to save your domain instance
}
Run Code Online (Sandbox Code Playgroud)