2013-02-22 31 views
5

Tôi mới làm quen với JSF và đang cố gắng hiểu sự khác biệt giữa hành động so với các thuộc tính kết quả là gì? Đây không phải là sự khác biệt giữa các nút và nút lệnh, nhưng giữa các thuộc tính kết quả so với hành động trên cùng một thẻ nút.JSF Hành động vs Thuộc tính Kết quả

Ví dụ, tôi có thể có:

<h:button value="Go" outcome="<value>" /> 

hoặc

<h:button value="Go" action="<value>" /> 

Tôi không chắc chắn khi nào sử dụng cái nào. Ngoài ra, nó có tạo sự khác biệt nếu <value><#{bean.methodThatReturnsStringInNavigationRule}> hoặc <string literal in navigation rule>?

Cảm ơn bạn.

+1

Nút thường được sử dụng để điều hướng, trong khi các nút lệnh thường được sử dụng để thực hiện các hành động kinh doanh (và, nếu cần, điều hướng). – skuntsel

+1

Theo bản cập nhật của bạn, không có thành phần JSF nào có cả hai thuộc tính trong cùng một thẻ. '' không hỗ trợ thuộc tính 'action'. Thuộc tính 'action' chỉ được hỗ trợ trong' '. – BalusC

+0

Tiêu đề của câu hỏi này làm cho nó dễ tìm hơn bây giờ.Tôi không nghĩ rằng nó nên được coi là duplciate nữa. – bjedrzejewski

Trả lời

10

khác biệt là trong khi hành động định nghĩa một phương pháp máy chủ được thực thi, kết quả quy định cụ thể một cái nhìn-id đó sẽ là điểm đến của trang của bạn. Bạn phải sử dụng các đầu vào JSF tùy thuộc vào mục tiêu bạn đang cố gắng đạt được:

  • <h:button outcome="user-management"> nhắm mục tiêu bạn đến trang quản lý người dùng. Hãy tưởng tượng nó như là loại liên kết.
  • <h:commandButton action="#{backingBean.goToUserManagement}" Nếu bạn quay trở lại "sử dụng quản lý" trong phương pháp hành động của bạn, được làm giống như kết quả nhưng nó cho phép bạn thực hiện một số logic vào phía máy chủ. Nó phải được nhúng vào một thẻ h:form.

Cũng không có sự khác biệt giữa <h:button outcome="user-management"> hoặc <h:button outcome="#{backingBean.userManagementNavigationResult}">, miễn là phương thức getter phía máy chủ của bạn trả về giá trị "quản lý người dùng".

+4

'' có thể được sử dụng bên ngoài một '', trong khi '' không thể. –

+0

Ngoài ra, ** hành động ** không * nhất thiết * dựa vào phương thức đậu, nhưng, tất nhiên, nếu nó không phải là trường hợp thì tại sao không sử dụng ''. – skuntsel

+0

cảm ơn bạn. và những gì về hoán vị của kết quả = # {backing-bean}? – dev

3

Nếu bạn thấy API JSF 2.0 không có thuộc tính action cho thẻ <h:button>. <h:button> là một thẻ mới trong JSF 2.0. Bạn có thể khai báo kết quả điều hướng trực tiếp trong thuộc tính outcome, không cần phải gọi một bean để trả lại kết quả như <h:commandButton>.

Nhưng nếu trình duyệt bị tắt JavaScript, điều hướng sẽ không thành công, vì thẻ “nút h:” tạo sự kiện “onclick” để xử lý điều hướng qua window.location.href.

<h:button value="buton" outcome="login" />   

// HTML sản lượng

<input type="button" 
     onclick="window.location.href='/ContextRoot/faces/login.xhtml; return false;" 
     value="buton" /> 

Nguồn: mkyong. Trang web yêu thích của tôi, nơi bạn có thể tìm thấy các ví dụ phong nha.

Blog tuyệt vời cho JSF: BalusC. Một anh hùng cho rất nhiều người trên diễn đàn này :).

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