2013-05-06 3 views
0

답변으로 제출 된 질문 목록이 무작위 인 응용 프로그램에 대해 동적 양식 모듈을 작업하고 있습니다. 내가 겪고있는 문제는 제출중인 Answer [] 배열이보기에 지정된 순서와 다르다는 것입니다. (즉,보기의 answer [0] .value가 응답 [3]. value로 컨트롤러에 입력됩니다). 뷰에 의해 제출 된 배열을 실제 배열로 처리하는 대신 정렬되지 않은 Set으로 이동 한 다음 컨트롤러로 들어가기 전에 다시 Array로 변환됩니다. 배열 주위를 정렬되지 않은 집합으로 취급하고 수동 색인을 사용해야하는 것 외에는이 방법이있을 수 있습니다.PlayFramework (1.2). 컨트롤러의 개체 배열 처리

내 컨트롤러는 기본적으로 내 템플릿에서

 
public static void process(Answer[] answers){ 
    for(int i=0;i<answers.length;i++){ 
     if(answers[i].question.required){ 
      Validation.required("answers["+i+"].value,answers[i].value); 
     } 
    } 
    if(Validation.hasErrors()){ 
    //render the template 
    }else{ 
     //save 
    } 
} 

 
    #{list items:questionSet.questions, as:"question"} 
     ... 
     <div class="#{if play.data.validation.Validation.hasError("anwsers["+question_index+'].value)}error#{/if}"> 
     <input name="answers[${question_index}].question.id" value="${question.id}"/> 
     <input name="answers[${question_index}].value" value="${answers[question_index].value}/> 
     <div/> 
    #{/list} 
+0

바꿀'목록 '사용하는 경우'[]'배열을 답변 무엇? –

답변

1

참고 :! 내가 가 재생 사용하고 프레임 워크 1.2.5

당신은 사용해야합니다 컨트롤러 방법 시그널 용 List<Answer> 보기에 question_index 변수 값 1로 시작했기 때문에,

public static void process(List<Answer> answers) { 
    ... // your logic 
} 

을 그리고 난 당신이보기에 제로 인덱싱 배열를 사용하는 것이 좋습니다 : Answer[] 대신 진짜야. 0 기반 인덱싱 배열을 사용하지 않으려는 경우 목록 크기가 1 요소만큼 커집니다. 인덱스가 1으로 시작하고 0 번째 인덱스의 값이 null입니다.

것을 방지하기 위해,보기 좋아해야 다음

#{list items:questionSet.questions, as:"question"} 
<div class="..."> 
    <input name="answers[${question_index-1}].id" value="${...}"/> 
    <input name="answers[${question_index-1}].value" value="${...}"/> 
</div> 
#{/list} 
+0

List 정렬 문제가 해결되었습니다. (또한이 점을 지적한 녹색 덕분에) –