2012-08-06 58 views
0

我在将某些参数从UI传递给Action Listener方法时遇到了一些问题。请找到下面的代码。我有两个textboxs,我会通过文本框的值到的ActionListener执行一些计算在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

它是一个请求范围?如果是的话,请尝试查看范围 – Daniel 2012-08-06 07:53:42

回答

1

症状表明,这些参数无法在与形式的页面被渲染的时刻(这正是当那些<f:param>旨意来解释)。它看起来很像你实际上将这些值绑定到了相同表单的输入元素。通过这种方式,<f:param>确实只会在实际提交填写值的表单时填充(如第一次点击时发生的那样)。这解释了为什么第二次点击和作品。

你很遗憾没有在你的问题中以任何方式阐述具体的功能需求,但是我明白你只想收集与已定义的动作按钮相同形式的提交输入值,如下所示:

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

在这种情况下,你不需要<f:param>这在所有。在调用操作方法时,JSF已经更新了模型值。只是删除那些<f:param>标签,并得到提交的值如下:

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