我在使用datatable的primefaces中遇到了问题。 我使用属性选择,但我不能采取我选择的对象。 看看我的代码
<p:dataTable id="dtProdutos" value="#{produtoBean.produtos}" var="p"
emptyMessage="Nenhum registro encontrado." selectionMode="single"
selection="#{produtoBean.selectedProduto}" rowKey="#{p.id}"
style="text-align: center; font-weight: bold;" >
<f:facet name="header">
<h:outputText value="Registro de Produtos" />
</f:facet>
<p:column>
<h:outputText value="#{p.id}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Nome" />
</f:facet>
<h:outputText value="#{p.nome}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Descrição" />
</f:facet>
<h:outputText value="#{p.descricao}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Valor Un." />
</f:facet>
<h:outputText value="#{p.valorUnitario}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Remover" />
</f:facet>
<f:ajax event="click" render="@form"
listener="#{produtoBean.remove(p)}">
<h:commandLink value="Remover" />
</f:ajax>
</p:column>
<f:facet name="footer">
<p:commandButton id="updateButton" value="Update" icon="ui-icon-search"
update=":frmGeral:display" oncomplete="produtoDialog.show()"/>
</f:facet>
</p:dataTable>
<p:dialog id="dialog" header="Alterar" widgetVar="produtoDialog" resizable="false"
width="200" showEffect="clip" hideEffect="fold">
<h:panelGrid id="display" columns="2" cellpadding="4">
<h:outputText value="Nome" />
<h:outputText value="#{produtoBean.selectedProduto.nome}" />
</h:panelGrid>
</p:dialog>
My Managed Bean
@ManagedBean
public class ProdutoBean{
@ManagedProperty(value = "#{entityManager}")
private EntityManager entityManager = Persistence.createEntityManagerFactory("PrimeiroTeste").createEntityManager();
private Produto produto = new Produto();
private List<Produto> produtos;
private Produto selectedProduto = new Produto();
public void save(){
ProdutoRepository produtoRepository = new ProdutoRepository(this.entityManager);
produtoRepository.save(this.produto);
this.produto = new Produto();
this.produtos = null;
}
public void remove(Produto produto){
ProdutoRepository produtoRepository = new ProdutoRepository(this.entityManager);
produtoRepository.remove(produto);
this.produtos = null;
}
public List<Produto> getProdutos(){
if (this.produtos == null){
ProdutoRepository produtoRepository = new ProdutoRepository(this.entityManager);
this.produtos = produtoRepository.getProdutos();
}
return this.produtos;
}
public Produto getProduto(){
return this.produto;
}
public void setProduto(Produto produto){
this.produto = produto;
}
public void setEntityManager(EntityManager entityManager){
this.entityManager = entityManager;
}
@SuppressWarnings("unused")
private EntityManager getManager() {
FacesContext fc = FacesContext.getCurrentInstance();
ExternalContext ec = fc.getExternalContext();
HttpServletRequest request = (HttpServletRequest) ec.getRequest();
return (EntityManager) request.getAttribute(" EntityManager ");
}
public Produto getSelectedProduto() {
return this.selectedProduto;
}
public void setSelectedProduto(Produto selectedProduto) {
this.selectedProduto = selectedProduto;
}
}
当我打开对话框时,它不会带来selectedProduto.nome 有人可以帮帮我吗?
答案 0 :(得分:0)
您始终为selectedProduto
private Produto selectedProduto = new Produto();
尝试使用此代码:
private Produto selectedProduto;
getters和setter已经在那里了。