2010-08-30 90 views
10

我已閱讀關於通過actionListener從jsf頁面傳遞參數給managedbean的信息。是否也可以將參數傳遞給一個簡單的動作方法?JSF2 Action參數

謝謝您的閱讀...


謝謝你這對你意見!我沒有你失去:-)

繼爲我工作:

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

所以現在誰值得綠色的勾? :-P我可以給他們兩個嗎?

回答

13

是的。或者:

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

或者

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

(和使用方法bean的屬性)

13

你說的是這種形式的參數?

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

這取決於EL實現。只有JBoss EL和JSP 2.2 EL才能做到這一點。如何安裝JBoss EL在this answer中有描述。可以使用f:paramf:param僅用於h:commandLink,但自JSF 2.0以來它也可以在h:commandButton上運行。例如。

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

@ManagedProperty其設置參數爲託管bean屬性:

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

有了這個但是你只限於標準型(StringNumberBoolean)。另一種方法是在f:setPropertyActionListener

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

也就是說,有更多的方式爲好,但是這一切都依賴於單一功能需求和Bean的作用。畢竟,你可能根本不需要傳遞一個「參數」。

3

新規格。 JSF2允許的操作方法,所以你可以做

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

在ManagedBean方法會收到一個PARAM:

public String action(Object complexObject) 

* 注:請確保您包括「EL-IMPL -2.2.jar「*

+0

這不是JSF特有的。這是EL特有的,也是Servlet 3.0/JSP 2.2(Tomcat 7,Glassfish 3,JBoss AS 6等)的一部分。所以當你在Servlet 2.5上運行JSF 2.0時,它將無法工作。這與JSF版本無關。 – BalusC 2011-05-11 03:11:48