biểu thức giá trị đang bị ràng buộc để tính được tiếp xúc bởi getter/setter công cộng .
<h:inputText value="#{bean.value}" />
Điều này yêu cầu public T getValue()
và public void setValue(T value)
phương pháp. Lưu ý rằng sự hiện diện của thuộc tính private T value;
với nghĩa đen chính xác cùng tên là không phải là bắt buộc. Trong các thành phần đầu ra thuần túy như <h:outputText>
, <h:dataTable>
, <f:selectItems>
, v.v., phương pháp setter cũng là không phải là bắt buộc.
Biểu thức phương thức được ràng buộc với phương pháp không getter/setter (phương pháp "hành động").
<h:commandButton value="submit" action="#{bean.submit}" />
Điều này đòi hỏi một phương pháp public T submit()
nơi T
cuối cùng có thể được void
và phương pháp cuối cùng có thể một vài tham số bổ sung, tùy thuộc vào chữ ký biểu hiện phương pháp của thuộc tính. Bạn có thể đọc chi tiết chính xác trong số view declaration language documentation, ví dụ: <h:inputText>
, <h:commandButton>
và <f:ajax>
. Dưới đây là một trích lục các định nghĩa action
và actionListener
thuộc tính của <h:commandButton>
:
Name: action
Type: javax.el.MethodExpression (signature must match java.lang.Object
action())
Description: MethodExpression representing the application action to invoke when
this component is activated by the user. The expression must
evaluate to a public method that takes no parameters, and returns an
Object (the toString() of which is called to derive the logical
outcome) which is passed to the NavigationHandler for this
application.
Name: actionListener
Type: javax.el.MethodExpression (signature must match void
actionListener(javax.faces.event.ActionEvent))
Description: MethodExpression representing an action listener method that will be
notified when this component is activated by the user. The
expression must evaluate to a public method that takes an
ActionEvent parameter, with a return type of void, or to a public
method that takes no arguments with a return type of void. In the
latter case, the method has no way of easily knowing where the event
came from, but this can be useful in cases where a notification is
needed that "some action happened".
Vâng, tôi đồng ý rằng spec là hơi cẩu thả trong tuyên bố rằng tất cả các thuộc tính biểu thức giá trị hỗ trợ. Nói chung, chúng thực sự có nghĩa là tất cả các thuộc tính đều hỗ trợ ngôn ngữ biểu thức như trong #{}
. Mặt khác, bạn cũng có thể giải thích các biểu thức phương thức như thể chúng chỉ là các biểu thức giá trị "đặc biệt", mặc dù chúng không chính xác như vậy. Tôi đã đăng một báo cáo vấn đề cụ thể về vấn đề này với yêu cầu xóa một số nhầm lẫn: issue 1036.
Có thể gán biểu thức phương thức thay cho biểu thức giá trị không? I E. ' ' –
@ St.Antario: http://stackoverflow.com/search?q=javax.el.propertynotwritableexception+h%3Ainputtext – BalusC
Vì vậy, , câu trả lời ngắn là không, bởi vì nó không có ý nghĩa .... –