我是java和primefaces的新手。我在数据表中使用自动完成功能。
使用自动完成功能,我选择产品,使用ajax,在“MovtosBean.UpdatePrice”中更新产品的价格。
在MovtosBean.UpdatePrice中的“item”对象,返回所选产品应返回的“null”值
我在哪里有错误?
感谢您的帮助。
感谢。
package com.siptec.sm_fact.classes;
import com.siptec.sm_fact.entities.Productos;
import com.siptec.smfact.entities.facade.ProductosFacadeLocal;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.enterprise.inject.New;
import javax.faces.application.FacesMessage;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import org.primefaces.component.datatable.DataTable;
import org.primefaces.event.SelectEvent;
@Named
@ViewScoped
public class MovtosBean implements Serializable{
public void UpdatePrecio(SelectEvent e){
Object item = e.getObject();
FacesMessage msg = new FacesMessage("Selected", "Item" + item);
// Productos p = ((Productos) e.getObject());
// p.getPrecio();
}
}
<h:body>
<h:form>
<p:dataTable value="#{movtosBean.lstMovimientos}" var="mov" editMode="cell" rowKey="#{mov.id}"
widgetVar="movProd" editable="true" rowIndexVar="rowIndex">
<p:column headerText="Id">
<h:outputText value="#{mov.id}"/>
</p:column>
<p:column headerText="Producto">
<h:outputLabel for="idprod" />
<p:inplace id="idprod" label="Ingrese productos" effectSpeed="fast" event="click">
<p:autoComplete
id="mProductos"
value="#{movtosBean.lstproductos}"
completeMethod="#{movtosBean.CargaSugerencias(query)}"
var="pro"
itemValue="#{pro}"
itemLabel="#{pro.descripProducto}"
converter="omnifaces.SelectItemsConverter"
dropdown="false">
<p:column>
#{pro.codProducto} - #{pro.descripProducto}
</p:column>
<p:ajax event="itemSelect" listener="#{movtosBean.UpdatePrecio}"
update="mPrecio">
</p:ajax>
</p:autoComplete>
</p:inplace>
</p:column>
</p:dataTable>
</h:form>
</h:body>
</html>
答案 0 :(得分:0)
converter="omnifaces.SelectItemsConverter"
在组件的f:selectItems中查找项目。那不是p:autoComplete - 它没有f:selectItems。你需要提供一个不同的转换器(看起来你在这里有实体,所以创建一个转换器,它执行EntityManager#find或getReference)。或者没有转换器,如果你只是想要字符串。