来自 p:ajax 中的侦听器的 InputText 值传递 null 而不是 value

Posted

技术标签:

【中文标题】来自 p:ajax 中的侦听器的 InputText 值传递 null 而不是 value【英文标题】:InputText value from a listener in p:ajax passes null instead of value 【发布时间】:2017-02-05 17:19:37 【问题描述】:

我试图将 inputText 的值放入 p:ajax 中的侦听器调用的方法中,但它总是传递 null 并且无法弄清楚原因。有任何想法吗?我真的很感激这里可以提供的帮助。

这是我的代码:

   <!-- Panel -->      
 <div class="panel panel-info">
 <div class="panel-body">
 <p:panel id="panel" widgetVar="panelwv" header="#msg.shametastit" toggleable="true" collapsed="true" style="white-space: normal;">     
 <div class="pull-right"><a HREF="http://www.openbizview.com/wiki/doku.php?id=reportes" target="_new" title="Wiki"><i class="fa fa-file-text text-info"></i></a></div>           
     <div class="row">
     <div class="col-lg-4 col-md-4 col-sm-4">  
            <p:inputText id="numtrabajadores" styleClass="spacing" maxlength="5" required="true" requiredMessage="#bd.getMessage('htmlvalidate')" value="#shametas.numtrabajadores" converter="javax.faces.BigDecimal" converterMessage="#bd.getMessage('htmlvalidatenum')"/>     
            <p:watermark for="numtrabajadores" value="#msg.shametasnum" />
            <p:spacer />
            <p:message for="numtrabajadores"/>
            <p:autoComplete id="sucursal" styleClass="spacing2" value="#shametas.sucursal" required="true" requiredMessage="#bd.getMessage('htmlvalidate')"  emptyMessage="#msg.html138"  completeMethod="#autocomplete.completeCentop"  valueChangeListener="#bd.setSucursal(shametas.sucursal)" dropdown="true" scrollHeight="250">
            <p:ajax event="itemSelect" update="tbResult" listener="#bd.setSucursal(shametas.sucursal)" />      
            <p:ajax event="itemSelect" update="headcount, promedio" listener="#shametas.onselectSuc()" />
            </p:autoComplete> 
            <p:watermark for="sucursal" value="#msg.shametassuc"  />
            <p:spacer /> 
            <p:message for="sucursal"/>   
    </div>
    </div>
    <h:inputHidden id="vop" value="#shametas.validarOperacion"/>
   </p:panel> 
 </div>
 </div>

这是我的 Bean 代码:

  public void onselectSuc(String pnum) 
      if(sucursal==null)
        sucursal = " - ";
        
      String[] vecsuc = sucursal.split("\\ - ", -1);

        //Consulta que hace la seleccion automatica para los inputtext de los empelados, valores nombre completo, genero, cargo!!!

      System.out.println("numtrabajadores: " + numtrabajadores);
      //System.out.println("anio: " + anio);
      //System.out.println("mes: " + mes);
     String query = " SELECT COUNT(A.FICTRA) AS HEADCOUNT, TRUNC(" + numtrabajadores + "/COUNT(A.FICTRA),2) AS PROMEDIO";
            query += " FROM NM_TRABAJADOR@INFOCENT_CALENDARIO A";
            query += " WHERE A.CODSUC like '" + vecsuc[0].toUpperCase() + "%'";
            query += " AND A.FECRET IS NULL ";
            query += " ORDER BY 1";

         PntGenerica select = new PntGenerica();
           try 
            select.selectPntGenerica(query,JNDIDESA);
         catch (NamingException e) 
            // TODO Auto-generated catch block
            e.printStackTrace();
        
           int rows = select.getRows();
           String vltabla[][] = select.getArray();
           if(rows>0)
             zuno = vltabla[0][0];
             zdos = vltabla[0][1];
             //ztres = vltabla[0][2];
           
           System.out.println(query);
           //System.out.println("zuno:" + zuno);
           //System.out.println("zuno:" + zdos);
           //System.out.println("zuno:" + ztres);
    

【问题讨论】:

【参考方案1】:

当我发布这篇文章时,我在互联网上研究了很多小时,我找到了使用 HttpServletRequest 解决我的问题的方法,这里是更新的 bean:

  public void onselectSuc()      

      if(sucursal==null)
        sucursal = " - ";
        

      String[] vecsuc = sucursal.split("\\ - ", -1);


      HttpServletRequest rq = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
      String ntrabajador = rq.getParameter("formshametas:numtrabajadores");
        //Consulta que hace la seleccion automatica para los inputtext de los empelados, valores nombre completo, genero, cargo!!!

      System.out.println("numtrabajadores: " + ntrabajador);

      //System.out.println("anio: " + anio);
      //System.out.println("mes: " + mes);
     String query = " SELECT COUNT(A.FICTRA) AS HEADCOUNT, CASE WHEN COUNT(A.FICTRA) = 0 THEN 0 WHEN COUNT(A.FICTRA) IS NULL THEN 0 ELSE TRUNC(" + ntrabajador + "/COUNT(A.FICTRA),2) END AS PROMEDIO";
            query += " FROM NM_TRABAJADOR@INFOCENT_CALENDARIO A";
            query += " WHERE A.CODSUC like '" + vecsuc[0].toUpperCase() + "%'";
            query += " AND A.FECRET IS NULL ";
            query += " ORDER BY 1";

         PntGenerica select = new PntGenerica();
           try 
            select.selectPntGenerica(query,JNDIDESA);
         catch (NamingException e) 
            // TODO Auto-generated catch block
            e.printStackTrace();
        
           int rows = select.getRows();
           String vltabla[][] = select.getArray();
           if(rows>0)
             zuno = vltabla[0][0];
             zdos = vltabla[0][1];
             //ztres = vltabla[0][2];
           
           System.out.println(query);
           //System.out.println("zuno:" + zuno);
           //System.out.println("zuno:" + zdos);
           //System.out.println("zuno:" + ztres);
    

像魅力一样工作。

有时你需要大声思考才能得到答案......

【讨论】:

以上是关于来自 p:ajax 中的侦听器的 InputText 值传递 null 而不是 value的主要内容,如果未能解决你的问题,请参考以下文章

当我单击 p:tree 时如何从 p:ajax 侦听器获取其他组件值

始终调用 p:ajax 事件的 oncomplete,即使侦听器没有返回任何内容[重复]

<p:ajax> 监听器永远不会被调用

用于 valueChangeListener 的 Ajax

Texture to texture2D

在哪里使用 React 中的 Hooks 定义需要来自全局状态的数据的套接字事件侦听器