1

我有一个带有 name 的获取参数controller。当我尝试将它(使用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. 使用获取参数值设置 bean 属性的正确方法是什么?实际上,我已经从中获得了价值,ExternalContext#getRequestParam但也许还有其他一些解决方案。
  2. 更有趣的问题:为什么 propertyActionListener 在这里不起作用?它实际上是做什么的?(我再次对此有一些想法,但最好阅读更全面的解释)。
4

1 回答 1

3

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

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

于 2010-03-29T19:50:47.053 回答