DepartamentoProdutoAction editar arquivo

0:00 / 0:00

O Action base ganha o método id_produto() — pré-requisito do Update. Enquanto o proBean() (que já existia do CREATE) lê dados do request, o id_produto() lê o ID do produto da sessão.

CÓDIGO COMPLETO
package br.xt.app.departamento.produto;

import br.xt.AppsRootAction;
import br.xt.app.departamento.DepartamentoManager;

public abstract class DepartamentoProdutoAction extends AppsRootAction {

    private DepartamentoProdutoWBean wbean = null;
    public DepartamentoProdutoWBean proWBean() throws Exception {
        if (wbean == null)
            wbean = (DepartamentoProdutoWBean) getManager().getInstance(DepartamentoProdutoWBean.class);
        return wbean;
    }

    private DepartamentoProdutoBean bean = null;
    public DepartamentoProdutoBean proBean() throws Exception {
        if (bean == null)
            bean = (DepartamentoProdutoBean) getManager().getInstance(DepartamentoProdutoBean.class);
        return bean;
    }

    // ADICIONAR
    public Integer id_produto() throws Exception {
        return getSession().getInteger(ROOT.concat(DepartamentoProdutoBean.ID_PRODUTO));
    }
    // FIM

    public static final String ROOT = DepartamentoManager.F_ACESSO_MODULO.concat("__PRODUTO/");

}

Mudança nesta sequência: somente o método id_produto() (verde). O proWBean(), proBean() e a constante ROOT já existiam das sequências anteriores.

Request vs Sessão — por que dois mecanismos?

O proBean() e o id_produto() parecem fazer coisas parecidas — ambos dão acesso ao ID do produto. Mas usam fontes diferentes:

MétodoFonteQuando usar
proBean().getId_produto()Request (dados do formulário)Quando os dados ACABARAM de chegar do browser (Insert, Update)
id_produto()Sessão (ficha permanente)Quando o ID foi guardado num request anterior (Update)

Por que a sessão? No fluxo de edição, o ID chega no request do ShowUpdate (quando o usuário clica na linha da lista). O ShowUpdate guarda esse ID na sessão. Depois, quando o usuário clica "Salvar", o request NÃO traz o ID de novo — o Update precisa buscá-lo na sessão via id_produto().

Fluxo:

  1. ShowUpdate — recebe o ID do request → guarda na sessão
  2. Update / Delete — lê o ID da sessão via id_produto()

A sessão funciona como um "lembrete entre requests" — o agente do ShowUpdate anota, e o agente do Update lê a anotação.

A chave da sessão — ROOT.concat(ID_PRODUTO)

A sessão é um mapa de chave/valor compartilhado por todo o módulo. Pra evitar colisão entre entidades diferentes (ex: um id_produto de Produto vs um id_produto de outro módulo), a chave usa o prefixo ROOT:

ROOT.concat(DepartamentoProdutoBean.ID_PRODUTO)
// Resultado: "XT.PAINEL_CONTROLE.ACESSO_MODULO.DEPARTAMENTO__PRODUTO/id_produto"

Essa string longa e única identifica sem ambiguidade "o ID do produto que está sendo editado no módulo Departamento". Mesmo padrão usado pelo FORM (ROOT.concat("__FORM")) e pelo FILTRO na List.