2012-09-11 2 views
0

Spring WebFlow를 사용 중입니다.스프링 웹 플로우에서 컬렉션의 유효성을 검사하는 방법은 무엇입니까?

적어도 15 개의 Practices 콜렉션이 있는지 확인해야합니다. 그렇지 않은 경우 다음 플로우로 변환 할 수 없습니다.

내 레지스터 흐름 :

<view-state id="practices" view="RegisterPractices" model="labs"> 
     <transition on="add" to="createNewPractice"></transition> 
     <transition on="next" to="items" validate="true"></transition> 
     <transition on="back" validate="false" to="owners"></transition> 
</view-state> 
<subflow-state id="createNewPractice" subflow="addPractice"> 
     <output name="practica" />  
     <transition on="practiceAdded" to="practices"> 
      <evaluate expression="labs.addPractice(currentEvent.attributes.practice)"></evaluate> 
     </transition>  
     <transition on="practiceCancel" to="practices"></transition> 
</subflow-state> 

는 JSP 관행 :

<h2>Practices</h2> 
    <table class="standard-table" cellpadding="0" cellspacing="0"> 
     <thead> 
      <tr> 
       <th>Practice</th> 
       <th>Operation</th> 
       <th>Action</th> 
      </tr> 
     </thead> 
     <tbody> 
      <c:forEach items="${ labs.practices }" var="practice"> 
      <tr> 
       <td>${ practice.practice}</td> 
       <td><c:choose><c:when test="${ practice.realize == 1}">Realize</c:when><c:otherwise>Deriva</c:otherwise></c:choose></td> 
      </tr> 
      </c:forEach> 
     </tbody> 
    </table> 
    <div> 
     <a href="${flowExecutionUrl}&_eventId=add">Add a New Practice</a> 
      <a href="${flowExecutionUrl}&_eventId=next">Back</a> 
     <a href="${flowExecutionUrl}&_eventId=back">Next</a> 
    </div> 

뷰 상태 관행 추가 된 관행의 목록이 단지 JSP입니다.

customValidator로 시도했지만 MessageBuilder.source()를 처리 할 수 ​​없습니다. 해당보기에 개체가 없기 때문입니다.

나는 의사 결정 상태와도 시도했지만 그와 나는

+0

실험실 모델의 사용자 정의 유효성 검사기에 새 MessageBuilder(). error(). source ("practices")를 사용할 수없는 이유는 무엇입니까? –

+0

내가보기 상태 (jsp)에 필드가있는 경우 소스를 나타낼 수 없다고 생각하기 때문입니다. – grteibo

답변

0

그래서이 사용자 정의 유효성 검사기가 작동하지 않습니다 "당신은 계속 적어도 15 개 방법을 선택해야합니다"와 같은 메시지를 표시 할 수 없습니다?

@Component 
public class LabsValidator { 

    public void validatePractices(final Labs labs,final ValidationContext context) { 
     if(labs.getPractices().size() < 15) { 
      context.getMessageContext().addMessage(new MessageBuilder().error().code("labs.practices.min15").build()); 
     } 
    } 

} 
+0

작업이 완벽하기 때문에 메시지를 잡는 데 문제가있었습니다. 감사합니다 – grteibo

+0

당신을 환영합니다! –

관련 문제