我在从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方法中获取参数的值时,在第一次单击“计算”按钮时似乎没有传递这些值。只有当我第二次单击按钮时,我似乎才能获得即时通过的值/参数。当我点击计算按钮时,能否让我知道我第一次获取值时需要做什么。
先谢谢
答案 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());
}