2012-12-17 24 views
5

Tôi có một Bean được quản lý trong chế độ ViewScope. Vì vậy, khi tôi gọi một số hành động từ trang Managed Bean này, trang của tôi không cập nhật. Tôi thấy rằng hành động của tôi được gọi tốt và trả về null (luồng công việc của viewscope là OK).JSF ViewScope - trả về null trên các hành động không cập nhật giao diện

Vì vậy, tôi đang làm gì sai?

Nếu tôi quay lại trang bằng Ajax thì nó hoạt động tốt.

EDIT:

Các phiên bản của tôi là:

JSF 2.1.14 với Primefaces 3.4.1

Mã của tôi:

@ManagedBean(name = "test") 
@ViewScoped 
public class TestMB implements Serializable { 
    private String status; 

    public String getStatus() { return this.status; } 
    public void setStatus(String status) { this.status = status; } 

    public String changeStatus() { 
     this.status = "ViewScope Works!"; 
     return null; 
    } 

} 

trang của tôi:

<!DOCTYPE HTML> 
<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
       xmlns:ui="http://java.sun.com/jsf/facelets" 
       xmlns:h="http://java.sun.com/jsf/html" 
       xmlns:f="http://java.sun.com/jsf/core" 
       xmlns:p="http://primefaces.org/ui" 
       template="/template/ui.xhtml"> 
    <ui:define name="head"> 
    </ui:define> 
    <ui:define id="teste" name="content"> 
     <h:form id="form"> 
      <h:outputText id="status" value="OK?: #{test.status}" /> 
      <p:commandButton id="myAction" value="Do it!" action="#{test.changeStatus}" /> 
     </h:form> 
    </ui:define> 
</ui:composition> 

Trên trang của tôi creen, biến trạng thái không thay đổi. Và, vâng .. hành động được gọi là OK. Một số mẹo?

+0

Để tránh sự hiển nhiên, hành động này có được gọi là ajax hay không? Vì vậy, bạn đang gọi hành động bằng ajax, nhưng không cập nhật trang bằng ajax? – BalusC

+0

Không. Tôi sẽ thử hai cách: Normal và By Ajax. Không hoạt động bình thường. Bằng cách ajax/rerender xem thành phần, hoạt động tốt. Tôi thấy trên firebug rằng phản ứng HTML được sao lưu OK (bằng cuộc gọi bình thường) nhưng VIEW cũng không làm mới/cập nhật. – abyteneverlie

+0

Hiển thị mã theo hương vị của SSCCE. Cách chuẩn bị cho JSF, hãy xem trang wiki JSF của chúng tôi http://stackoverflow.com/tags/jsf/info – BalusC

Trả lời

8

Bạn đang sử dụng <p:commandButton> để gửi biểu mẫu. Nó gửi theo mặc định một yêu cầu ajax. Nó cập nhật theo mặc định không có gì. Do đó, hành vi mà bạn đang quan sát là hoàn toàn mong đợi. Có một số cách để giải quyết "vấn đề" này (được trích dẫn, vì nó thực sự không phải là một vấn đề, nhưng chỉ là một sự hiểu lầm về khái niệm):

  1. Yêu cầu không sử dụng ajax.

    <p:commandButton ... ajax="false" /> 
    
  2. Yêu cầu cập nhật biểu mẫu.

    <p:commandButton ... update="@form" /> 
    
  3. Thay thế bằng thành phần JSF chuẩn, không sử dụng ajax theo mặc định.

    <h:commandButton ... /> 
    

Lưu ý rằng vấn đề cụ thể này không liên quan đến phạm vi tầm nhìn riêng của mình. Bạn sẽ có chính xác cùng một vấn đề (với chính xác các giải pháp tương tự) khi sử dụng một phạm vi khác, bao gồm phạm vi yêu cầu.

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