2010-03-29 57 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

相关问题