【问题标题】:selectOneMenu calls value setter twiceselectOneMenu 两次调用 value setter
【发布时间】:2018-12-07 14:20:56
【问题描述】:

我有一个 selectOneMenu,它的问题是它更新了两次值!!第一次使用我选择的值,然后立即使用之前的数字更新该值!

    <p:selectOneMenu id="qupdate" value="#{object.pquantity}">

<f:selectItem styleClass="form-control"
                            itemLabel="-- SELECT QUANTITY -- " itemValue=""
                            noSelectionOption="true" />

                        <f:selectItems  value="#{selectonemenu.quantoptions}" var="f"
                            itemLabel="#{f}" itemValue="#{f}" />


                     <p:ajax execute="qupdate" event="change"
                            listener="#{Bean.quantitychange(object.pquantity, object.id)}" /> 


                    </p:selectOneMenu>

反正有这个工作,我试图追踪它实际上调用了 setter 两次!

【问题讨论】:

标签: jsf primefaces


【解决方案1】:

@Holger 在 cmets 中是正确的。 p:selectOneMenu 不需要侦听器来实际处理值更改。应该只使用侦听器来在 bean 中实际进行其他类型的交互。

在这种情况下,固定代码应如下所示:

<p:selectOneMenu id="qupdate" value="#{object.pquantity}">

    <f:selectItem styleClass="form-control"
                  itemLabel="-- SELECT QUANTITY -- "
                  itemValue=""
                  noSelectionOption="true" />

                  <f:selectItems value="#{selectonemenu.quantoptions}" 
                                 var="f"
                                 itemLabel="#{f}"
                                 itemValue="#{f}" />
</p:selectOneMenu>

有关应该如何使用 ajax 侦听器的更多信息,请参阅to this question

【讨论】:

  • 你没有按照@Holger 所说的去做。删除听众是所说的。您删除了整个 p:ajax,这改变了整个行为。如果您仍然想做某事,您可以将侦听器留在原处,只是不要将任何对象传递给它。应该也可以,所以这个答案有点不太好......
  • 我调用 ajax 不是为了设置值,而是调用另一种方法来完成另一项工作
猜你喜欢
  • 2014-05-13
  • 1970-01-01
  • 2021-12-19
  • 2019-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多