p:spinnerp:ajax和f:param混在一起,bean方法执行了多次
p:spinner p:ajax and f:param mixed together, bean method executed multiple times
我正在使用 Primefaces 4.0、JSF Mojarra 2.1.7 和 jBoss_7.1.1_Final.
进行开发
我正在创建的工具主要是一个对话框 window 显示带有动态列 (p:columns) 的数据表
那些动态列显示这样的 pSpinner :
<p:spinner id="updateQj_#{colIndex}_#{rowQj.idQbt}" widgetVar="updateQjJs_#{colIndex}_#{rowQj.idQbt}" stepFactor="1" min="0" max="#{rowQj.qbtType}"
value="#{rowQj.quantiteDuJour(qjColonne.property)}" onkeydown="return false;"
styleClass="editQj" rendered="#{not verrouille}" title="Cliquez ici pour modifier la quantité journalière" >
<p:ajax listener="#{recherche.updateQj}" update="@this, :formRecherche:growl" process="@this"/>
<f:param name="idQbt" value="#{rowQj.idQbt}"/>
<f:param name="jour" value="#{qjColonne.property}"/>
<f:param name="ligne" value="#{rowIndex}"/>
<f:param name="colonne" value="#{colIndex}"/>
</p:spinner>
</p:column>
</p:columns>
一切似乎都工作正常,直到出于某种未知原因,在其中一列中单击会修改当前值加上之前在另一列中更新的值。要清楚地看到它:如果我在同一列中保留 clicking/updating 个微调器,则一切正常。如果我单击另一列的微调器,它会更新两者。任何想法将不胜感激。
在 primefaces4 中,p:spinner 在由 p:columns>p:column 组成的单元格中表现不正常,第一次点击有效,但在某些时候,简单的点击会产生不间断的ajax 调用就像我单击每个单元格中的每个微调器一样...经过几天的解决方法,并认为 pf 在我自己尝试的掩护下使用了 jquery。令人惊讶的是,firebug 控制台记录 'spinner is not a function' 并且 jquery.ui.version 是 1.10.3 所以我在 jquery 的网站上下载了 1.10.4 并在之后将其包含在我的 header 中其他javascripts。 jquery.ui.version 显示 1.10.4 并且不再出现错误消息。 :)
最后,我在 p:datatable
中的 p:columns 的每个 p:column 中写了这个
<input id="updateQj_#{rowIndex}_#{colIndex}_#{rowQj.idQbt}" widgetVar="updateQjJs" class="editQj" value="#{rowQj.listeDesQj[colIndex].quantiteRealisee}">
</input>
<script type="text/javascript">
jQuery("input[id=updateQj_#{rowIndex}_#{colIndex}_#{rowQj.idQbt}]")
.spinner({ min:0,
max:#{rowQj.qMax},
step:1,
change:function(){ rmt_updateQj([parameters]); } });
</script>
我正在使用 Primefaces 4.0、JSF Mojarra 2.1.7 和 jBoss_7.1.1_Final.
进行开发我正在创建的工具主要是一个对话框 window 显示带有动态列 (p:columns) 的数据表
那些动态列显示这样的 pSpinner :
<p:spinner id="updateQj_#{colIndex}_#{rowQj.idQbt}" widgetVar="updateQjJs_#{colIndex}_#{rowQj.idQbt}" stepFactor="1" min="0" max="#{rowQj.qbtType}"
value="#{rowQj.quantiteDuJour(qjColonne.property)}" onkeydown="return false;"
styleClass="editQj" rendered="#{not verrouille}" title="Cliquez ici pour modifier la quantité journalière" >
<p:ajax listener="#{recherche.updateQj}" update="@this, :formRecherche:growl" process="@this"/>
<f:param name="idQbt" value="#{rowQj.idQbt}"/>
<f:param name="jour" value="#{qjColonne.property}"/>
<f:param name="ligne" value="#{rowIndex}"/>
<f:param name="colonne" value="#{colIndex}"/>
</p:spinner>
</p:column>
</p:columns>
一切似乎都工作正常,直到出于某种未知原因,在其中一列中单击会修改当前值加上之前在另一列中更新的值。要清楚地看到它:如果我在同一列中保留 clicking/updating 个微调器,则一切正常。如果我单击另一列的微调器,它会更新两者。任何想法将不胜感激。
在 primefaces4 中,p:spinner 在由 p:columns>p:column 组成的单元格中表现不正常,第一次点击有效,但在某些时候,简单的点击会产生不间断的ajax 调用就像我单击每个单元格中的每个微调器一样...经过几天的解决方法,并认为 pf 在我自己尝试的掩护下使用了 jquery。令人惊讶的是,firebug 控制台记录 'spinner is not a function' 并且 jquery.ui.version 是 1.10.3 所以我在 jquery 的网站上下载了 1.10.4 并在之后将其包含在我的 header 中其他javascripts。 jquery.ui.version 显示 1.10.4 并且不再出现错误消息。 :) 最后,我在 p:datatable
中的 p:columns 的每个 p:column 中写了这个 <input id="updateQj_#{rowIndex}_#{colIndex}_#{rowQj.idQbt}" widgetVar="updateQjJs" class="editQj" value="#{rowQj.listeDesQj[colIndex].quantiteRealisee}">
</input>
<script type="text/javascript">
jQuery("input[id=updateQj_#{rowIndex}_#{colIndex}_#{rowQj.idQbt}]")
.spinner({ min:0,
max:#{rowQj.qMax},
step:1,
change:function(){ rmt_updateQj([parameters]); } });
</script>