Spring Web Flow - walidacja

0

Witam, zgodnie z dokumentacją http://docs.spring.io/autorepo/docs/webflow/2.3.x/reference/html/views.html#view-validate zaimplementowałem sobie metodę walidującą model, jednak nie działa mi ta walidacja. Może ktoś by mi podpowiedział gdzie mam błąd? Obecnie wygląda to tak że przy przejściu z collectShippingDetail do orderConfirmation przepływ działa tak jakby tej walidacji w ogóle nie było.

Klasa której obiekt dodaje do modelu.

 
public class Order  implements Serializable{

	private static final long serialVersionUID = -3560539622417210365L;
	private Long orderId;
	private Cart cart;
	public Customer customer;
	private ShippingDetail shippingDetail;

// metoda walidująca pole shippingDate Klasy shippingDetail
  public void validateCollectShippingDetail(ValidationContext context) {
	        MessageContext messages = context.getMessageContext();
	        if (shippingDetail.getShippingDate().equals(19/01/2016)) {                   ///data przypisana na sztywno do testów
	            messages.addMessage(new MessageBuilder().error().source("shippingDetail").  /* tutaj jakie źródło powinienem podać takie jak jest czy może shippingDetail.shippingDate? */
	                defaultText("Check in date must be a future date").build());
	        } 
	    }
}

Klasa ShippingDetail:

public class ShippingDetail implements Serializable{

	private static final long serialVersionUID = 6350930334140807514L;
	
	@NotNull(message="{NotNull.Product.unitPrice.validation}")
	private String name;
	@DateTimeFormat(pattern = "dd/MM/yyyy")
	private Date shippingDate;

....
}
 

Mój przepływ wygląda tak:

 
...
<var name="order" class="com.packt.webstore.domain.Order" />
...
<view-state id="collectCustomerInfo" view="collectCustomerInfo.jsp" model="order">
		<transition on="customerInfoCollected" to="collectShippingDetail" />
	</view-state>

	<view-state id="collectShippingDetail" model="order">
		<transition on="shippingDetailCollected" to="orderConfirmation" />
		<transition on="backToCollectCustomerInfo" to="collectCustomerInfo" />
	</view-state>

	<view-state id="orderConfirmation">
		<transition on="orderConfirmed" to="processOrder" />
		<transition on="backToCollectShippingDetail" to="collectShippingDetail" />
	</view-state>
.....
0

Adnotacje są tutaj zbędnę, to pozostałości po próbie walidacji z ich pomocą, która nie działała.

0

A dolaczyles jakis validator, ze mowisz, ze nie dziala przez adnotacje? Dodaj np. hibernate-validator do poma.

0

Dodałem validator przez pom.

0

Jakieś pomysły ?

0
 

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="webBindingInitializer">
            <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
                <property name="validator" ref="validator"/>
            </bean>
        </property>
    </bean>

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
0

Szczery co z tym beanem? Bo mam go i dalej nie działa.

0

Ale jak testujesz, ze to nie dziala?

0

Aaa czyli te komunikaty muszę dodać jeszcze do widoku tak? Ale jak to zrobić? Chciałbym że nie można było przejść z jednego <view-state> do następnego kiedy pole jest niepoprawnie wypełnione.

0

Pewnie przy przepływie muszę wstawić jakąś akcję która wywołuje mi daną metodę prawda?

Ale jak mam wyświetlić komunikat stąd w formularzu?

public void validateCollectCustomerInfo(ValidationContext context) {
            MessageContext messages = context.getMessageContext();
            if (customer.getName() == null) {                   
                messages.addMessage(new MessageBuilder().error().source("customer").  
                    defaultText("Pole musi zostać wypełnione").build());
            } 
        }
 

Takie coś nie działa jakby co:

<form:errors path="customer" cssClass="text-danger"/>
 

1 użytkowników online, w tym zalogowanych: 0, gości: 1