2010-08-30 31 views
10

Tôi đã đọc về truyền tham số từ trang jsf đến managedbean thông qua actionListener. Có thể truyền tham số cho một phương thức hành động đơn giản không?JSF2 Tham số hành động

Cảm ơn bạn đã đọc ...


Cảm ơn bạn cho cả lời khuyên của bạn! Tôi sẽ bị mất mà không có em :-)

Sau đây làm việc cho tôi:

<h:commandLink id="link" action="#{overviewController.showDetails}" > 
    <f:setPropertyActionListener target="#{overviewController.show_id}" value="#{project.id}" /> 
    <h:outputText value="#{project.title}" /> 
</h:commandLink> 

Vì vậy, bây giờ những người xứng đáng với đánh dấu màu xanh lá cây? :-P Tôi có thể cho hai người trong số họ không?

Trả lời

13

Có. Hoặc:

action="#{bean.method(param)}" 

Hoặc

<h:commandButton .. > 
    <f:setPropertyActionListener 
     target="#{bean.targetProperty}" value="#{param}" /> 
</h:commandbutton> 

(và sử dụng tài sản đậu trong phương pháp này)

13

Bạn đang nói về các thông số theo hình thức này?

<h:commandButton action="#{bean.action(param)}" /> 

Điều đó tùy thuộc vào việc triển khai EL. Chỉ JBoss EL và JSP 2.2 EL mới có khả năng thực hiện điều này. Làm thế nào để cài đặt JBoss EL được mô tả trong this answer.

Hoặc, bạn cũng có thể chỉ sử dụng f:param. f:param chỉ hoạt động với h:commandLink, nhưng kể từ JSF 2.0, nó cũng hoạt động trên h:commandButton. Ví dụ.

<h:commandButton action="#{bean.action}"> 
    <f:param name="foo" value="bar" /> 
</h:commandButton> 

với một @ManagedProperty mà đặt tham số là tài sản bean được quản lý:

@ManagedProperty("#{param.foo}") 
private String foo; 

Với điều này tuy nhiên bạn bị giới hạn loại tiêu chuẩn (String, Number, Boolean). Một cách khác là các f:setPropertyActionListener:

<h:commandButton action="#{bean.action}"> 
    <f:setPropertyActionListener target="#{bean.foo}" value="#{otherBean.complexObject}" /> 
</h:commandButton> 

Điều đó nói rằng, có nhiều cách là tốt, nhưng điều này tất cả phụ thuộc vào yêu cầu chức năng duy nhất và phạm vi đậu. Có lẽ bạn không cần phải vượt qua một "tham số" ở tất cả sau khi tất cả.

3

Thông số mới. JSF2 cho phép rằng phương pháp hành động nhận được một param vì vậy bạn có thể làm

<h:commandButton action="#{bean.action(otherBean.complexObject)}"> 

tại ManagedBean phương pháp này sẽ là:

public String action(Object complexObject) 

* Lưu ý: chắc chắn rằng bạn bao gồm “el-impl -2.2.jar ”*

+0

Đây không phải là JSF cụ thể. Đây là EL cụ thể và một phần của Servlet 3.0/JSP 2.2 (Tomcat 7, Glassfish 3, JBoss AS 6, vv). Vì vậy, khi bạn chạy JSF 2.0 trên Servlet 2.5, nó sẽ không hoạt động. Điều này là bất kể phiên bản JSF. – BalusC

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