Input usando rich:datatable

3 respostas
J

Boa tarde pessoal.

Estou tentando inserir a quantidade de itens diretamente em uma rich:datatable, entretanto, apesar do bind estar correto, ele não faz o set no atributo do bean.
Segue a página:

<rich:dataTable value="#{produtos}" var="_produto"
									id="produtosDataTable" rows="15">
									<rich:column>
										<f:facet name="header">Quantidade</f:facet>
										<h:inputText value="#{_produto.quantidade}" size="2" />
									</rich:column>

									<rich:column sortBy="#{_produto.categoria}"
										filterBy="#{_produto.categoria}" filterEvent="onkeyup">
										<f:facet name="header">Categoria</f:facet>
										<h:outputText value="#{_produto.categoria}"></h:outputText>
									</rich:column>

									<rich:column sortBy="#{_produto.nome}"
										filterBy="#{_produto.nome}" filterEvent="onkeyup">
										<f:facet name="header">Produto</f:facet>
										<h:outputText value="#{_produto.nome}"></h:outputText>
									</rich:column>
                                                                       
                                                                        <rich:column>
									<h:commandButton
											action="#{listaComprasItensManager.adicionar}"
											value="Adicionar a Lista" />
									</rich:column>

									<f:facet name="footer">
										<rich:datascroller for="produtosDataTable" />
									</f:facet>

								</rich:dataTable>

O atributo quantidade não está sendo populado no EntityBean. Ele é um atributo transient e possui get e set normalmente.

Segue a classe:

@Name("produto")
@Entity
public class Produto implements Serializable{
	
	private static final long serialVersionUID = 2375123736077052214L;
	private Integer id;
	private String codigo;
	private String categoria;
	private String nome;
	private String descricao;
	private Double valor;
	private Double valorPromocional;
	private Calendar validadeValorPromocional;
	private Double valorVigente;
	private byte[] imagem;
	private String tipo;
	private Usuario mantenedor;
	private Integer quantidade;
	
	public Produto() {}

	@Id
	@SequenceGenerator(name="produto_seq_id", sequenceName="produto_seq_id")
	@GeneratedValue(generator="produto_seq_id", strategy=GenerationType.AUTO)
	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public String getCategoria() {
		return categoria;
	}

	public void setCategoria(String categoria) {
		this.categoria = categoria;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getDescricao() {
		return descricao;
	}

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

	public Double getValor() {
		return valor;
	}

	public void setValor(Double valor) {
		this.valor = valor;
	}

	@Column(name="valor_promocional")
	public Double getValorPromocional() {
		return valorPromocional;
	}

	public void setValorPromocional(Double valorPromocional) {
		this.valorPromocional = valorPromocional;
	}

	@Column(name="validade_valor_promocional")
	public Calendar getValidadeValorPromocional() {
		return validadeValorPromocional;
	}

	public void setValidadeValorPromocional(Calendar validadeValorPromocional) {
		this.validadeValorPromocional = validadeValorPromocional;
	}

	@Transient
	public Double getValorVigente() {
		if((validadeValorPromocional == null) || (validadeValorPromocional.before(DataHora.getData(new Date(), "yyyy-MM-dd hh:mm")))){
			valorVigente = valor;
		}else{
			valorVigente = valorPromocional;
		}
		return valorVigente;
	}

	public void setValorVigente(Double valorVigente) {
		this.valorVigente = valorVigente;
	}

	@Lob
	@Basic(fetch=FetchType.LAZY)
	public byte[] getImagem() {
		return imagem;
	}

	public void setImagem(byte[] imagem) {
		this.imagem = imagem;
	}
	
	@Column(name="tipo_arquivo")
	public String getTipo() {
		return tipo;
	}

	public void setTipo(String tipo) {
		this.tipo = tipo;
	}
	
	@ManyToOne(cascade=CascadeType.ALL)
	public Usuario getMantenedor() {
		return mantenedor;
	}

	public void setMantenedor(Usuario mantenedor) {
		this.mantenedor = mantenedor;
	}

	@Transient
	public Integer getQuantidade() {
		return quantidade;
	}

	public void setQuantidade(Integer quantidade) {
		this.quantidade = quantidade;
	}

}

Alguem sabe o que pode estar acontecendo?

3 Respostas

J

Boa tarde Pessoal.

Continuo com o mesmo problema, pesquisei bastante no Oráculo e aquim entretanto, não sei qual seria o problema com a <rich:dataTable>, será que ela não permite que se coloque <h:inputText> na <rich:column>?

Obrigado a todos.

gomesrod

A lista de produtos está armazenada na sessão?
Se não estiver ele acaba se perdendo na hora do submit.

Por enquanto só consigo pensar nisso, se tiver mais idéias eu volto…

J

Na verdade, o ManagedBean que manipula EntityBean é de escopo de conversação (estou usando JBoss Seam), será que se eu mudar o escopo pra sessão ele pega?
No momento, não estou na maquina com o código, vou testar ainda hoje esta mudança de escopo e posto o resultado !!!

Vlw pela ajuda!

Criado 25 de outubro de 2009
Ultima resposta 30 de out. de 2009
Respostas 3
Participantes 2