jsf - p :remoteCommand inside iterating component like p:dataTable only works for last row

标签 jsf primefaces datatable remotecommand

我试图打印在 inputText 中输入的值,但它只显示 0 除了最后一行它显示正确的值! 这是一个最小的代码(我没有包括所有字段和 getters/setters)

@ManagedBean(name="medicament")
@ViewScoped
public class MedicamentBean {
  private List<Medicament> medicaments;
  private String libelle;
  private int qte_vente;

  public void test() {
    System.out.println(this.qte_vente);
}
}

html:

<h:form>
<p:dataTable value ="#{medicament.medicaments}" var ="m">
   <p:column headerText="libelle">      
      <h:outputText value = "#{m.libelle}"/>
   </p:column>
<p:column headerText="qte">
    <h:inputText value ="#{medicament.qte_vente}" onkeyup="myCommand();"/>
    <p:remoteCommand name="myCommand" actionListener="#{medicament.test()}"  style="display: none;" 
 />
   </p:column>

</p:dataTable>
</h:form>

最佳答案

在网络浏览器中打开网页。右键单击并选择查看页面源代码。仔细查看您在那里看到的生成的 HTML 输出。例如,当您有 10 个表行时p:datatable ,它应该看起来像这样

<table>
    <tr><td><script>function myCommand() { /* ... */ }</script></td></tr>
    <tr><td><script>function myCommand() { /* ... */ }</script></td></tr>
    <tr><td><script>function myCommand() { /* ... */ }</script></td></tr>
    <tr><td><script>function myCommand() { /* ... */ }</script></td></tr>
    <tr><td><script>function myCommand() { /* ... */ }</script></td></tr>
    <tr><td><script>function myCommand() { /* ... */ }</script></td></tr>
    <tr><td><script>function myCommand() { /* ... */ }</script></td></tr>
    <tr><td><script>function myCommand() { /* ... */ }</script></td></tr>
    <tr><td><script>function myCommand() { /* ... */ }</script></td></tr>
    <tr><td><script>function myCommand() { /* ... */ }</script></td></tr>
</table>

(当您使用不同的迭代组件(如 p:datagrid 或什至类似 ui:repeat 的组件时,它看起来不同,但通用的“重复”是相同的)

猜猜当你执行 myCommand() 时调用了哪一个在 JavaScript 中...

是的,那是行不通的。

只用一个 <p:remoteCommand> 就可以了 <p:dataTable> 之外你给哪个pass a parameter ,这是适用于各种迭代组件的通用解决方案。

但在您的情况下,您实际上使事情过于复杂。只需使用 <p:ajax>相反。

<h:inputText ...>
    <p:ajax event="keyup" listener="#{medicament.test()}" />
</h:inputText>

就这些。

关于jsf - p :remoteCommand inside iterating component like p:dataTable only works for last row,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59162360/

相关文章:

c# - 如何检查数据表中存在的值

ajax - 覆盖 <f :ajax> rendering with a custom renderer

html - 更改 primefaces 选择列表的宽度

java - JSF h :inputText validation and f:ajax render

java - 使用 JSF 在新的浏览器窗口中阅读并打开 PDF

primefaces - Primefaces条形图导出为JPEG或PNG

c# - 将数据表存储在 Cookie 中

c# - 将 DataTable 导出到 Excel 文件显示 ?关于数学符号

jsf - 如何在 JSF 转换器中使用分离实体 + 版本

jsf - 在 MyFaces 中重定向后在 Mojarra 中工作时不显示 Flash 消息