【问题标题】:Grails Dynamic radio groupGrails 动态广播组
【发布时间】:2014-04-09 21:20:11
【问题描述】:

我要求 grails 应用程序在屏幕上显示问题列表,每个问题下方列出 6 个等级选项。这些问题和成绩的信息来自数据库中的查找表。我有问题和成绩显示在屏幕上,但我不确定如何获取查找信息以保存在数据库中。我还想知道是否有一种方法可以为每个问题默认选择某个等级。我尝试了选中的 =“S”,但这只会为最底层的问题选择 S 级。

我的视图代码是

  <label for="questions"></label>
    <ul class="one-to-many">
    <!-- Evaluation Questions -->
    <g:each in="${cdeEvaluationInstance?.questions}" var="evalQuestion" status="i">
    <g:hiddenField name="cdeEvaluation.questions[${i}].id" value="${evalQuestion.id}"/>
    <legend>
    ${evalQuestion.areaOfEval.title}
    </legend>
    <p>
    <strong>Focus areas: ${evalQuestion.areaOfEval.focusArea}</strong>
    </p>
    <p>
    <em> ${evalQuestion.areaOfEval.description}
    </em>
    </p>
    <p>
    <g:each in="${evalQuestion.areaOfEval.grades.sort{it.grade}}"
    var="grade" ><div class="radio">
    <span class="clear long"> 
    <input type="radio"
    name="radioGroup" value="${evalQuestion.grade}" checked="S"  /> 
    <label class="long"><strong> ${grade.grade}
    </strong> ${grade.description}</label>
    </div>
    </g:each>

我的控制器代码是

def evalQuestions = EvaluationService.fetchActiveEvaluationQuestions();
            //def evaluation = new CdeEvaluation(questions: evalQuestions)

           def evaluation = new CdeEvaluation(params)
           evaluation.setQuestions(evalQuestions)

问题和答案所在表格的域

package gov.mt.mdt.cde.domain.evaluation

import java.util.Date;

class CdeEvalQuestion extends Base{

    CdeAreaOfEvaluation areaOfEval
    CdeAreaOfEvalCriteria grade

    String comments

    static belongsTo = [cdeEvaluation: CdeEvaluation]




    static mapping = {
        id column: 'cevqu_id_seq'
        id generator: 'sequence', params: [sequence: 'cevqu_id_seq']

        areaOfEval column: 'caoe_id_seq'
        grade column: 'caoec_id_seq'
    }

    static constraints = {
        comments(blank:true, nullable:true, maxSize:2000)

        createdBy(blank: false, nullable:false, maxSize:13)
        dateCreated(blank: false, nullable:false)
        lastUpdatedBy(blank: false, nullable:true, maxSize:13)
        lastUpdated(blank: false, nullable:true)
    }
}

我刚刚开始学习 grails/groovy,所以您可以指出我的任何帮助或示例都会很棒。谢谢!

【问题讨论】:

    标签: grails radio-group


    【解决方案1】:

    所以默认情况下选择一个特定的问题,你会做这样的事情:

    <g:radioGroup name="myGroup" labels="evalQuestion.areaOfEval.grades" values="evalQuestion.areaOfEval.grades*.grade" value="evalQuestion.grade">
        ${it.radio} <label class="long"><strong>${it.label.grade}</strong> ${it.label.description}</label>
    </g:radioGroup>
    

    这不需要您编写内部每个。基本上,您传递一个标签数组和一个并行值数组。 value 属性是 values 属性的默认值。 radioGroup 的内部主体将针对每个标签和值对重复。这 *。 (又名扩展运算符)基本上与使用 collect() 方法相同。

    我删除了标签的扩展运算符,并为标签传递了完整的对象。然后在标签的主体内,当我执行it.label 时,我拥有完整的对象,并且可以使用不同的字段it.label.descriptionit.label.grade

    至于将默认设置为 S 级。您需要编写代码才能从 evalQuestion.areaOfEval.grades 中找到 S 级。比如:

    evalQuestion.areaOfEval.grades.find { it.grade == 'S' }
    

    并将其传递给标签的 value 属性。你可以这样做:

    <g:set var="defaultGrade" value="evalQuestion.areaOfEval.grades.find { it.grade == 'S' }"/>
    
    <g:radioGroup name="myGroup" 
                  labels="evalQuestion.areaOfEval.grades" 
                  values="evalQuestion.areaOfEval.grades*.grade" 
                  value="defaultGrade">
    

    【讨论】:

    • 我已将其切换并正常工作,但我对两件事有疑问。在值字段中,我将如何默认选择来自 evalQuestion.areaOfEval.grades 的“S”等级?同样在第一个示例中,您会注意到我在等级字母周围有一个很强的标签。有没有办法通过上面的例子得到它。我似乎在所有值周围都得到了强烈的标签或没有。
    • 由于我看不到您的域模型,我将尝试回答您的问题。由于 cmets 有限,我将修改我的问题。
    • 标签现在很好用。谢谢!我仍然有默认值的问题。上面列出的代码中的 -> 应该做什么?当我使用上面的语法时,它会在我的报价未关闭时出错。我已经尝试了各种没有 -> 的其他 .find 选项,但它也不起作用。感谢您的所有帮助...非常感谢!
    • 我更新了它以删除使用 -> 来定义闭包的参数列表。相反,它使用带有单个参数的闭包可以使用的隐含的 it 变量。如果您想了解这意味着什么,您需要阅读 groovy 闭包。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    相关资源
    最近更新 更多