2011-09-13 26 views
16

Tôi có tình huống sau đây:Primefaces onclick đồng và khác biệt onSuccess

sau khi nhấp chuột vào một nút, một số logic kinh doanh được thực hiện và sau khi nó được thực hiện, một tab mới với một báo cáo nên được hiển thị.

<p:commandButton value="this button" update="growlMain" 
       actionListener="#{myBean.businesslogic}" 
       onstart="ajaxDialog.show();" 
       oncomplete="ajaxDialog.hide();" 
       onsuccess="window.open('./report.jsp', '_newtab');" /> 

này không hoạt động :(

Nếu logic kinh doanh chỉ kéo dài một vài mili giây, các công việc sau:

<p:commandButton value="this button" update="growlMain" 
       actionListener="#{myBean.fastbusinesslogic}" 
       onclick="window.open('./report.jsp', '_newtab');" /> 

các onclick mở một tab mới, cũng những thứ như OnStart nhưng nó không hoạt động với onsuccess hoặc chưa hoàn thành. Tại sao? Và có giải pháp cho logic nghiệp vụ kéo dài trong một vài giây không?

+0

Câu hỏi của bạn là khó hiểu ... làm những gì bạn có nghĩa là "logic kinh doanh kéo dài một vài giây "? Bạn có nói rằng bạn muốn gọi 'window.open ('./ report.jsp', '_newtab');' sau khi phía máy chủ actionListener 'businessLogic' đã hoàn tất chưa? –

Trả lời

7

Tôi đã nhận thấy rằng các tiện ích cho lệnh PrimeFaces nhưng n không hoạt động. Tuy nhiên, công việc chưa hoàn chỉnh hoạt động và không cần thiết ngay cả khi có lỗi, chẳng hạn như trong trường hợp của tôi cho thấy một hộp thoại thành công ngay cả khi có lỗi trong logic nghiệp vụ của tôi. Đã cố gắng sử dụng onsuccess nhưng không hoạt động. Bạn có thể thử onComplete như sau:

<p:commandButton value="this button" update="growlMain" 
       actionListener="#{myBean.businesslogic}" 
       onstart="ajaxDialog.show();" 
       oncomplete="ajaxDialog.hide(); window.open('./report.jsp', '_newtab');"/> 
32

onclick được gọi trước khi yêu cầu ajax thậm chí còn tạo ra (tinh khiết phía khách hàng) trong khi onComplete và onSuccess được thực hiện sau khi máy chủ đáp ứng với yêu cầu ajax. Vì vậy, nếu bạn cần thực hiện một số logic nghiệp vụ trước khi hiển thị một hộp thoại, ví dụ, bạn muốn đi với không đầy đủ. Đó là những gì tôi luôn luôn sử dụng.

Bạn cũng có thể điều kiện javascript của mình bên trong không đầy đủ để chỉ thực hiện nếu không có lỗi xác thực. Trực giác Tôi nghĩ rằng onsuccess sẽ hành xử như thế và chỉ thực thi khi không có lỗi xác nhận, nhưng đó không phải là cách nó đi. Tôi thực sự không biết sự khác biệt giữa chúng. Tôi cho rằng có một cách để gắn cờ thành công = false trong bean sao lưu, nhưng tôi thực sự không thể tìm thấy nó trong tài liệu.

Nếu bạn muốn kiểm tra để xác nhận trong thuộc tính onComplete bạn, đây là cách bạn muốn làm:

oncomplete="if (!args.validationFailed){someDialog.hide()}" 

Trong trường hợp này, bạn sẽ chỉ đóng hộp thoại nếu các lĩnh vực được xác nhận đúng. Bạn có thể thực sự tiêm các tham số từ bean sao lưu và sử dụng chúng trong javascript sau khi yêu cầu đã được phục vụ. Trong đậu ủng hộ của bạn, bạn có thể làm một cái gì đó như thế này:

RequestContext.getCurrentInstance().addCallbackParam("showDialog", false); 

Và bạn có thể truy cập vào các thông số như thế này trong thuộc tính không đầy đủ của bạn:

oncomplete="if (args &amp;&amp; args.showDialog){someDialog.show()}else{ alert('the bean didnt let me open the dialog')}" 

Dù sao, tôi hy vọng rằng sẽ giúp.

+4

Tôi cần thiết để thoát khỏi tha & biểu tượng: \t oncomplete = "if (args & & args.showDialog) {dialog1.show()} else {alert ('bean không cho phép tôi mở hộp thoại')} " – 8bitjunkie

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