Primefaces - propriedades do objeto no Bean não estão sendo alteradas

2 respostas
D

Boa tarde, estou desenvolvendo uma tela de filtros para fornecedores, e na minha página feita com Primefaces, tenho um campo onde digito o texto que vai ser utilizado para o filtro, e passo o valor deste texto para o Controller onde o mesmo tem um objeto que guarda a descrição do filtro para posteriormente vai ser utilizado para recuperação dos dados. Na página passo a descrição do inputText através da propriedade value para o Controller por meio do seguinte código: value="#{pesquisaFornecedorController.filter.descricao}", mas no objeto localizado no Controller não reflete o texto do inputText na propriedade descrição do objeto filter. Por que será que isto está ocorrendo? segue os trechos do código:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:composite="http://java.sun.com/jsf/composite"
	xmlns:p="http://primefaces.org/ui">
<composite:interface>
	<composite:attribute name="widgetVar" required="true" />
</composite:interface>
<composite:implementation>
	<p:dialog id="buscafornecedor" header="#{msg.busca_fornecedor}"
		style="width:600px;min-width:550px;min-height:300px"
		widgetVar="#{cc.attrs.widgetVar}" dynamic="true">
...
		<p:overlayPanel for="frmToolbar:filtro" id="panelFiltro">
			<h:form id="frmFiltro" prependId="false">
				<h:panelGrid>
					<p:inputText id="txtNomeFornecedor"					
						value="#{pesquisaFornecedorController.filter.descricao}" />
					<p:watermark for="txtNomeFornecedor"
						value="#{msg.digite_fornecedor}" />
					<p:selectBooleanCheckbox itemLabel="#{msg.exibir_inativos}" />
					<p:commandButton value="#{msg.pesquisar}" process="@form"
						action="#{pesquisaFornecedorController.pesquisar()}"
						icon="ui-icon-search">
					</p:commandButton>
				</h:panelGrid>
			</h:form>
		</p:overlayPanel>
...
	</p:dialog>
</composite:implementation>
</html>

abaixo segue o código do controller:

@ViewScoped
@Named("pesquisaFornecedorController")
public class PesquisaFornecedorController {

	// private List<Fornecedor> fornecedores;
	private LazyFornecedorDataModel lazyFornecedores;

	@EJB
	private FornecedorService fornecedorService;

	@Inject
	private FornecedorFilter filter;

	private DataTable dtFornecedor;

...

	public FornecedorFilter getFilter() {
		return filter;
	}

	public void setFilter(final FornecedorFilter filter) {
		this.filter = filter;
	}

}

aqui o código do objeto que contém a descrição que vai ser utilizada no filtro:

public class FornecedorFilter extends Filter {

	public static final FornecedorFilter DEFAULT_FILTER = new FornecedorFilter();

	private String descricao = "";
	private boolean exibirInativos = false;

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public boolean isExibirInativos() {
		return exibirInativos;
	}

	public void setExibirInativos(boolean exibirInativos) {
		this.exibirInativos = exibirInativos;
	}

	@Override
	public Filter getDefault() {
		return DEFAULT_FILTER;
	}

...

}

2 Respostas

mauricioadl

falta a anotacao @ManagedBean na classe

fabiozanardi

@Inject não vai funcionar com viewscoped pois o viewscoped padrao do mojarra nao faz parte do cdi, tente utilizar o SessionScoped do EJB apenas para testes e veja se vai funcionar

alguma mensagem de erro no console?

Criado 1 de março de 2012
Ultima resposta 1 de mar. de 2012
Respostas 2
Participantes 3