3

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

@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>
4

1 回答 1

4

在浏览器中打开网页。右键单击并选择View Page Source。仔细查看您在那里看到的生成的 HTML 输出。当您在 eg 中有 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>

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

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

对,这根本行不通。

它只适用于传递参数的对象<p:remoteCommand> 之外的一个,这是各种迭代组件的通用解决方案。<p:dataTable>

但在你的情况下,你实际上把事情复杂化了。改用就好<p:ajax>了。

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

就这样。

于 2019-12-03T17:36:06.303 回答