2010-03-29 60 views
1

我有一個名稱爲controller的獲取參數。當我嘗試它(與propertyChangeListener)傳遞給我的支持bean我得到null,而不是該參數的實際價值:如何在jsf中將get參數傳遞給backing bean?

<h:commandButton value="#{msg['mail.send']}" styleClass="mailbutton" action="#{mailSender.sendMail}"> 
    <f:setPropertyActionListener target="#{mailSender.controllerName}" value="{#param.controller}"/> 
</h:commandButton> 

所以,我有兩個問題:

  1. 什麼是正確的使用get參數值設置bean屬性的方法? 其實,我已經從ExternalContext#getRequestParam得到了價值,但也許還有其他一些解決方案。
  2. 更有趣的問題:爲什麼propertyActionListener在這裏不起作用?它實際上做了什麼? (我對此有一些想法,但是閱讀更全面的解釋會很好)。

回答

3

首先,h:commandButton觸發POST請求,而不是GET請求。要發起GET請求,您需要h:outputLink。要設置GET參數,您需要f:param。要將其設置爲bean屬性,請在faces-config.xml中將其定義爲<managed-property>,值爲#{param.name}。更多提示和代碼示例可參見here

二,您的代碼無效。 f:setPropertyActionListener的值應該是#{param.controller}。並且爲了使它起作用,#{param.controller}應該在初始請求期間已經在那裏。它不會像您期望的那樣自動設置後續請求中的值。爲此,您需要改爲<h:inputHidden value="#{mailSender.controllerName}"/>

+0

@BalusC:從你的回答我明白我問的問題很不明確,所以你決定立刻回答所有可能的'真實'意思。無論如何,感謝它像往常一樣有用。 – Roman 2010-03-30 09:27:06

相關問題