如何在jsf中将get-parameter传递给backing bean?

时间:2010-03-29 16:09:05

标签: java jsf parameter-passing

我有一个名为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>

所以,我有两个问题:

  1. 使用get-parameter值设置bean属性的正确方法是什么? 实际上,我已经从ExternalContext#getRequestParam获得了价值,但也许还有其他一些解决方案。
  2. 更有趣的问题:为什么propertyActionListener在这里不起作用?它实际上做了什么? (我对此有一些想法,但阅读更全面的解释会很高兴。)

1 个答案:

答案 0 :(得分:3)

首先,h:commandButton会触发POST个请求,而不是GET个请求。要触发GET请求,您需要h:outputLink。要设置GET参数,您需要f:param。要将其设置为bean属性,请在<managed-property>中将其定义为faces-config.xml,其值为#{param.name}。可以找到更多提示和代码示例here

其次,您的代码无效。 f:setPropertyActionListener值应为#{param.controller}。为了让它发挥作用,#{param.controller}在初始请求期间已经存在。它不会像您期望的那样自动设置后续请求中的值。为此,您需要<h:inputHidden value="#{mailSender.controllerName}"/>