2010-11-09 19 views

Trả lời

3

Một mẹo nhỏ bạn có thể sử dụng là thêm logic cần thiết để đầu của phương pháp xác nhận của bạn, một cái gì đó như thế này (mẫu từ hướng dẫn tham khảo):

<view-state id="enterBookingDetails" model="booking"> 
    <transition on="proceed" to="reviewBooking"> 
</view-state> 

public class Booking { 
    private Date checkinDate; 
    private Date checkoutDate; 
    ... 

    public void validateEnterBookingDetails(ValidationContext context) { 
     // do whatever you want to do before attemting validation 
     ... 

     // now do validation 
     ... 
    } 
} 
+1

Không phải là chữ ký phương thức của phương thức xác thực bị khóa bởi luồng web? Điều gì sẽ xảy ra nếu bạn cần dữ liệu khác được chuyển vào? –

+0

Trong thiết kế phương pháp tiếp cận này sẽ không được xác nhận trộn tốt và xử lý kinh doanh – abhi

1

Vấn đề với câu trả lời klr8 là bạn làm không có bất kỳ thông tin nào ngoài validationContext được chuyển vào trình xác nhận hợp lệ. Nếu bạn cần thông tin khác từ luồng của mình, bạn có thể thử kích hoạt xác thực theo cách thủ công:

<transition on="submit" to="isValid" validate="false"> 
    <evaluate expression="someLogicIWantToDo(a,b,c)" /> 
    <evaluate expression="booking.validate(bookingForm, messageContext)"/> 
</transition> 

<decision-state id="isValid"> 
    <if test="messageContext.hasErrorMessages()" then="home" else="page2"/> 
</decision-state> 

Phương pháp xác thực luồng web có thể lấy MessageContext hoặc ValidationContext. Tôi không chắc chắn làm thế nào để truy cập validationContext từ Web Flow để kích hoạt thủ công nếu bạn xác nhận các phương thức có validationContext.

Các vấn đề liên quan