在ActionListener中传递参数的问题

时间:2012-08-06 06:27:23

标签: jsf jsf-2

我在从UI传递一些参数到Action Listener方法时遇到了一些问题。请在下面找到代码。我有两个文本框,我将文本框的值传递给actionListener以执行一些计算

<h:commandButton  id="calculateButtonID"  value="Calculate" actionListener="#{adjustedBean.calculate}">
    <f:param name="targetInventoryDays" value="#{adjustedBean.adjustedQtyVo.targetDays}"></f:param>
    <f:param name="seasonalityFactor"  value="#{adjustedBean.adjustedQtyVo.seasonFactor}"></f:param>
       </h:commandButton>

当我尝试在ActionListener方法中获取参数的值时,在第一次单击“计算”按钮时似乎没有传递这些值。只有当我第二次单击按钮时,我似乎才能获得即时通过的值/参数。当我点击计算按钮时,能否让我知道我第一次获取值时需要做什么。

先谢谢

1 个答案:

答案 0 :(得分:1)

症状表明,在呈现带有表单的页面时,这些参数不可用(这正是将解释那些<f:param>的时间)。它看起来很像你实际上将这些值绑定到同一个表单的输入元素。这样,<f:param> s确实只会在您实际提交填写了值的表单时填充(如第一次点击时那样)。这解释了为什么第二次点击和工作。

遗憾的是,你没有在你的问题中以任何方式详细说明具体的功能要求,但我知道你只想收集与动作按钮完全相同的提交输入值,这些输入值的定义如下: / p>

<h:inputText value="#{adjustedBean.adjustedQtyVo.targetDays}" />
<h:inputText value="#{adjustedBean.adjustedQtyVo.seasonFactor}" />

在这种情况下,您根本不需要<f:param>。在调用action方法时,JSF已经更新了模型值。只需删除这些<f:param>代码并获取提交的值,如下所示:

public void calculate() {
     System.out.println(adjustedQtyVo.getTargetDays());
     System.out.println(adjustedQtyVo.getSeasonFactor());
}