来自 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 侦听器获取其他组件值