Câu hỏi Tham số hành động JSF2


Tôi đã đọc về việc chuyển các tham số từ trang jsf sang 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?

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


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

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 đánh dấu màu xanh lá cây? :-P Tôi có thể cho hai người trong số họ không?


10
2017-08-30 11:36


gốc




Các câu trả lời:


Vâng. Hoặc:

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

Hoặc là

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

(và sử dụng thuộc tính bean trong phương thức)


13
2017-08-30 11:44





Bạn đang nói về các tham số trong biểu mẫu này?

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

Điều đó phụ thuộc vào việc thực hiện 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 câu trả lời này.

Ngoài ra, bạn cũng có thể sử dụng f:param. Các f:param đã từng làm việc với h:commandLink chỉ, 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 đặt tham số là thuộc tính bean được quản lý:

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

Tuy nhiên, với điều này, bạn bị hạn chế với các loại tiêu chuẩn (String, Number, Boolean). Một lựa chọn khác là 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 hơn là tốt, nhưng tất cả điều này 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ả.


13
2017-08-30 11:50





Thông số mới. JSF2 cho phép phương thức hành động nhận một tham số để bạn có thể thực hiện

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

tại ManagedBean, phương thức sẽ là:

public String action(Object complexObject)

*Lưu ý: đảm bảo bạn bao gồm “el-impl-2.2.jar” *


3
2018-05-11 01:59



Đâ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