2012-12-03 40 views
21

Sự khác biệt giữa việc sử dụng giá trị và ràng buộc với JavaServer Faces là gì và khi nào bạn sử dụng một giá trị trái ngược với giá trị khác? Để làm cho nó rõ ràng hơn những gì câu hỏi của tôi là, một vài ví dụ đơn giản được đưa ra ở đây.Sự khác biệt giữa giá trị và ràng buộc

Thông thường với JSF trong mã XHTML bạn sẽ sử dụng "giá trị" như ở đây:

<h:form> 
    <h:inputText value="#{hello.inputText}"/> 
    <h:commandButton value="Click Me!" action="#{hello.action}"/> 
    <h:outputText value="#{hello.outputText}"/> 
</h:form> 

Sau đó đậu là:

// Imports 
@ManagedBean(name="hello") 
@RequestScoped 
public class Hello implements Serializable { 

private String inputText; 
private String outputText; 

public void setInputText(String inputText) { 
    this.inputText = inputText; 
} 

public String getInputText() { 
    return inputText; 
} 

// Other getters and setters etc. 

// Other methods etc. 

public String action() { 

    // Do other things 

    return "success"; 
} 
} 

Tuy nhiên, khi sử dụng "ràng buộc", mã XHTML là:

<h:form> 
    <h:inputText binding="#{backing_hello.inputText}"/> 
    <h:commandButton value="Click Me!" action="#{backing_hello.action}"/> 
    <h:outputText value="Hello!" binding="#{backing_hello.outputText}"/> 
</h:form> 

và đậu tương ứng được gọi là bean ủng hộ và ở đây:

// Imports 
@ManagedBean(name="backing_hello") 
@RequestScoped 
public class Hello implements Serializable { 

private HtmlInputText inputText; 
private HtmlOutputText outputText; 

public void setInputText(HtmlInputText inputText) { 
    this.inputText = inputText; 
} 

public HtmlInputText getInputText() { 
    return inputText; 
} 

// Other getters and setters etc. 

// Other methods etc. 

public String action() { 

    // Do other things 

    return "success"; 
} 
} 

Có những khác biệt thực sự nào giữa hai hệ thống và khi nào bạn sử dụng bean sao lưu thay vì đậu thông thường? Có thể sử dụng cả hai?

Tôi đã nhầm lẫn về điều này một thời gian và sẽ đánh giá cao nhất việc này đã bị xóa.

+0

liên quan: http://stackoverflow.com/questions/12506679/what -is-component-binding-in-jsf-khi-nó-được-ưa thích-to-be-được sử dụng/12512672 # 12512672 – BalusC

Trả lời

2

Đôi khi chúng ta không thực sự cần áp dụng giá trị của UIComponent cho thuộc tính bean. Ví dụ bạn có thể cần truy cập UIComponent và làm việc với nó mà không áp dụng giá trị của nó cho thuộc tính mô hình. Trong những trường hợp như vậy, tốt nhất là sử dụng đậu phụ thay vì đậu thường. Mặt khác trong một số trường hợp, chúng tôi có thể cần phải làm việc với các giá trị của UIComponent mà không cần truy cập có lập trình cho chúng. Trong trường hợp này, bạn có thể chỉ cần đi với đậu thường.

Vì vậy, quy tắc chỉ sử dụng bean sao lưu khi bạn cần quyền truy cập có lập trình vào các thành phần được khai báo trong chế độ xem. Trong các trường hợp khác, sử dụng đậu thường.

35

value thuộc tính thể hiện giá trị của thành phần. Đây là văn bản mà bạn nhìn thấy bên trong hộp văn bản khi bạn mở trang trong trình duyệt.

binding thuộc tính được sử dụng để ràng buộc thành phần của bạn thành thuộc tính bean. Ví dụ trong mã của bạn, thành phần inputText của bạn bị ràng buộc với bean như thế này.

#{backing_hello.inputText}` 

Nó có nghĩa là bạn có thể truy cập vào toàn bộ thành phần và tất cả các thuộc tính của nó trong mã của bạn như một đối tượng UIComponent. Bạn có thể làm rất nhiều công việc với các thành phần bởi vì bây giờ nó có sẵn trong mã java của bạn. Ví dụ, bạn có thể thay đổi kiểu của nó như thế này.

public HtmlInputText getInputText() { 
    inputText.setStyle("color:red"); 
    return inputText; 
} 

Hoặc đơn giản để vô hiệu hóa các thành phần theo một tài sản đậu

if(someBoolean) { 
    inputText.setDisabled(true); 
} 

và vân vân ....

+2

OK, cảm ơn rất nhiều vì đã trả lời của bạn.Nói cách khác, ràng buộc mạnh hơn nhiều so với nhận giá trị, khi bạn có được toàn bộ thành phần. Tuy nhiên, khi trong Chế độ xem khôi phục JSF .... Biểu thức phản hồi kết xuất là ràng buộc được kết xuất, so với giá trị? – csharp

+0

Nếu tôi đã hiểu chính xác câu hỏi của bạn thì câu trả lời là 'Có'. Khi bạn tải trang của bạn, 'getters' của các thành phần được ràng buộc với bean được gọi và do đó các thành phần được khôi phục. – prageeth

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