2014-04-09 35 views
2

我有一个Grails应用程序要求在屏幕上显示问题列表,每个问题下面列出6个等级选项。这些问题和等级的信息来自数据库中的查找表。我有问题和成绩显示在屏幕上,但我不知道如何去查找信息保存在数据库中。我还想知道是否有办法针对每个问题默认选择某个等级。我尝试了checked =“S”,但是这仅仅为最底层的问题选择S等级。Grails动态广播组

我的视图代码是

<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,所以你可以指点我的任何帮助或例子都会很棒。谢谢!

回答

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的内体将为每个标签和值对重复使用。 *。 (aka扩展运算符)与使用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"> 
+0

我知道它切换和工作,但我有一个关于2件事的问题。在值字段中,我将如何默认选择来自evalQuestion.areaOfEval.grades的'S'等级?同样在第一个例子中,你会注意到我在等级信件周围有一个强大的标签。有没有一种方法可以用上面的例子来解决这个问题。我似乎在所有的价值或没有价值的情况下获得了强大的标签。 – user3490014

+0

由于我无法看到您的域模型,我会尝试回答您的问题。由于意见有限,我会修改我的问题。 – chubbsondubs

+0

该标签现在效果很好。谢谢!虽然我仍然有问题的默认值。在上面列出的代码中应该做些什么?当我使用上面的语法时,它会在我的报价单上出错而没有关闭。我已经尝试了各种其他.find选项,但没有 - >它也不起作用。感谢您的帮助......我真的很感激! – user3490014