Как проверить коллекцию в весеннем веб-потоке?

Я использую Spring WebFlow.

Мне нужно проверить, есть ли у меня хотя бы 15 коллекций типа Практика, если нет, я не могу перейти на следующий поток.

мой регистрационный поток:

<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>

Практики View-State — это просто jsp со списком добавленных практик.

Я пытался использовать customValidator, но не могу обработать MessageBuilder.source(), потому что у меня нет объекта в этом представлении.

Я тоже пробовал с состоянием принятия решения, но при этом я не могу показать сообщение типа «Вы должны выбрать не менее 15 практик, чтобы продолжить».


person grteibo    schedule 11.09.2012    source источник
comment
почему вы не можете сделать новый MessageBuilder().error().source(practices) в своем пользовательском валидаторе на лабораторной модели?   -  person marco.eig    schedule 11.09.2012
comment
потому что я думаю, что не могу указать источник, если у меня есть поле в этом состоянии просмотра (jsp).   -  person grteibo    schedule 11.09.2012


Ответы (1)


так что этот пользовательский валидатор не будет работать?

@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());
        }
    }

}
person marco.eig    schedule 11.09.2012
comment
работает отлично, у меня были проблемы с получением сообщений. Спасибо - person grteibo; 11.09.2012