2014-04-09 70 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