2012-12-28 31 views
7

Tôi có một nút lệnh (một nút Hủy cụ thể) mà tôi muốn bỏ qua việc xác thực một số thành phần trên trang của tôi. Khi tôi có ngay lập tức = "true" được đặt trên nút lệnh của tôi, thuộc tính cập nhật không hoạt động. Bởi "không làm việc" tôi có nghĩa là các giá trị trên: centerForm: p_definition không đặt lại những gì họ cần. Nếu tôi chọn một mục từ trình đơn thả xuống hoặc nhập dữ liệu vào văn bản nhập, thông tin sẽ biến mất khi nhấp vào hủy. Thiết lập ngay lập tức = "false" hoặc để nó hoàn toàn không thiết lập lại các trường như mong đợi. Đây là định nghĩa của commandbutton Tôi gặp rắc rối với.Ngay lập tức = "true" làm cho cập nhật = "thành phần" thành thất bại

<p:commandButton value="Cancel" style="float: right;" 
    immediate="true" 
    actionListener="#{manageBomPropHandler.doCancel()}" 
    update=":centerForm:p_definition"/> 

Đó có phải là hành vi mong đợi từ ngay lập tức = "true" không? Nếu vậy, làm thế nào bạn có được xung quanh này cho các nút hủy bỏ?

Trả lời

7

"Update" sẽ được gọi/thực hiện tại giai đoạn Value Update Model. Khi bạn đặt thuộc tính "ngay lập tức" thành lệnh nút, giai đoạn này sẽ bị bỏ qua. Xem hình ảnh bên dưới để biết thêm chi tiết. Standard Lifecycle executes Update Model Values phase

  P1: Standard Lifecycle executes Update Model Values phase 

Immediate Lifecycle ignored Update Model Values phase

  P2: Immediate Lifecycle ignored Update Model Values phase 
+2

Sơ đồ trực quan đẹp mắt của vòng đời. Nếu của bạn, công việc tốt đẹp, rất tốt. Nếu không phải của bạn, bạn vui lòng thêm phân bổ? – SteveS

+3

Nguồn: http://www.javacodegeeks.com/2012/01/jsf-and-immediate-attribute-command.html – CSchulz

1

Trong trường hợp của tôi, để cập nhật các trường, tôi đã đính kèm p: ajax vào thành phần bắt buộc. Điều đó đảm bảo rằng các trường/biến tương ứng trong bean sao lưu được cập nhật ngay khi người dùng thực hiện thay đổi trong bất kỳ trường nào trong số đó.

Một yêu cầu khác mà tôi có là làm mới bảng dữ liệu sau khi người dùng nhấp vào nút lệnh ngay lập tức - đúng. đang Để làm được điều đó, tôi đã sử dụng như:

RequestContext.getCurrentInstance().reset("Datatable ID"); 
0

Nếu có thể giúp đỡ, có một đã giải pháp cho lĩnh vực đầu vào sạch với primefaces:

<p:commandButton value="Reset Tag" update="panel" process="@this" style="margin-right:20px;" > 
    <p:resetInput target="panel" /> 
</p:commandButton> 

HOẶC

<h:commandButton value="Reset p:ajax" style="margin-right:20px;" > 
    <p:ajax update="panel" resetValues="true" /> 
</h:commandButton> 

Nguồn: http://www.primefaces.org/showcase/ui/misc/resetInput.xhtml

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