java如何在jsf中将getparameter传递给支持bean?
我有一个名为controller
的get参数。当我尝试将它(使用propertyChangeListener
)传递给我的支持bean时,我得到的是null
,而不是该参数的实际值:
<h:commandButton value="#{msg['mail.send']}" styleClass="mailbutton" action="#{mailSender.sendMail}">
<f:setPropertyActionListener target="#{mailSender.controllerName}" value="{#param.controller}"/>
</h:commandButton>
所以,我有两个问题:
- 用get参数值设置bean属性的正确方法是什么?
实际上,我已经从
ExternalContext#getRequestParam
中得到了值,但也许还有其他一些解决方案李> - 更有趣的问题是:为什么propertyActionListener不在这里工作?它实际上做什么?(我也有一些想法,但如果能读到更全面的解释就好了)李>
# 1 楼答案
首先,
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}"/>