2014-04-09 22 views
2

У меня есть требование для приложения grails отображать список вопросов на экране с 6 вариантами класса, перечисленными ниже каждого из вопросов. Информация для этих вопросов и оценок поступает из таблицы поиска в базе данных. У меня есть вопросы и оценки, отображаемые на экране, но я не уверен, как получить информацию о поиске для сохранения в базе данных. Я также хотел бы знать, есть ли способ присвоить определенный класс по умолчанию для каждого из вопросов. Я попробовал check = "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. Внутренний корпус радиогруппы будет повторяться для каждой пары ярлыков и значений. *. (aka spread operator) в основном то же самое, что и метод collect().

Я удалил оператор распространения для ярлыка, и я передал полный объект для ярлыка. Тогда внутри тела тега, когда я делаю it.label У меня есть полный объект и вы можете использовать разные поля it.label.description и it.label.grade.

Что касается установки значения по умолчанию на степень S. Вам нужно будет написать код, чтобы найти оценку S от evalQuestion.areaOfEval.grades. Что-то вроде:

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

И передать это значение атрибута тега. Вы можете сделать это:

<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

Я переключил его и работал, но у меня есть вопрос о двух вещах. В поле значений как я по умолчанию должен выбрать оценку «S», которая поступает из evalQuestion.areaOfEval.grades? Также в первом примере вы заметите, что у меня есть сильный тег вокруг письма класса. Есть ли способ получить это с помощью приведенного выше примера. Кажется, я получаю сильную метку вокруг всего значения или ничего. – user3490014

+0

Поскольку я не могу видеть вашу модель домена, я постараюсь ответить на ваш вопрос. Я буду изменять свой вопрос, поскольку комментарии ограничены. – chubbsondubs

+0

Теперь ярлык отлично работает. Спасибо! Однако у меня все еще есть проблемы со значением по умолчанию. что в коде, указанном выше, должно быть сделано? Это будет ошибка в моей цитате не закрытой, когда я использую синтаксис выше. Я пробовал множество других опций .find без ->, и он тоже не работает. Спасибо за вашу помощь ... Я очень ценю это! – user3490014

Смежные вопросы