0

我在将一些参数从 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 方法中获取参数的值时,在第一次单击“计算”按钮时似乎没有传递这些值。只有当我第二次单击按钮时,我似乎才获得了我传递的值/参数。当我单击计算按钮时,您能否让我知道我需要做什么才能第一次获得这些值。

提前致谢

4

1 回答 1

1

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

不幸的是,您没有在您的问题中以任何方式详细说明具体的功能要求,但我知道您只想收集与操作按钮相同形式的提交输入值,其定义如下:

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

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

public void calculate() {
     System.out.println(adjustedQtyVo.getTargetDays());
     System.out.println(adjustedQtyVo.getSeasonFactor());
}
于 2012-08-06T11:32:48.963 回答