fiz uma pequena busca no fórum mas não achei nada parecido com o meu problema. O que ocorre é o seguinte:
Tenho uma página de consulta que primeiramente deve somente apresentar o campo para busca e o botão pesquisar! A questão é: Uso a taglib logic present para quando não houver resultado da pesquisa não apresentar os campos abaixo do botão pesquisar. E quando ouver resultado deveria mostrar alguns campos, mas eles não são mostrados mesmo que o atributo esteja no request. Segue o código:
public class OSConsultaAction extends Action{
public ActionForward execute(ActionMapping map, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception
{ OSPesqForm opf = (OSPesqForm)form;
if(opf.getNumeroos()>0){
//pega a instancia do factory
DAOFactory dao = DAOFactory.getInstance();
//pega a instancia que contem os métodos da Ordem de Servico
OsDAO os = dao.getOsDAO();
//pega a os pelo numero fornecido
OSVo o = os.getOsByNumber(opf.getNumeroos());
os.close();
if(o!=null){
//conseguiu recuperar a os do banco
SolicitanteDAO sdao=dao.getSolicitanteDAO();
Solicitante s = sdao.getSolicitanteById(o.getIdSolicitante());
sdao.close();
ServicoDAO sedao = dao.getServicoDAO();
Servico se = sedao.getServicoById(o.getIdServico());
sedao.close();
HorarioDAO hdao = dao.getHorarioDAO();
Horario h =hdao.getHorarioById(o.getIdHorario());
hdao.close();
//seta os atributos no request
opf.setData(BeanUtil.transformDateOnString(o.getData()));
opf.setEmail(s.getEmail());
opf.setHorario(h.getdescricao());
opf.setMatricula(s.getMatricula());
opf.setServico(se.getNome());
opf.setDescricao(o.getDescricao());
form = opf;
return map.findForward("sucesso");
}else{
//nao conseguiu recuperar a os da banco de dados
opf.clear();
request.setAttribute("erros","A ordem não foi encontrada!");
return map.findForward("erro");
}
}else{
opf.clear();
request.setAttribute("erros","Operação inválida!");
return map.findForward("erro");
}
}
}
Acho que eu entendi o problema, o atributo que eu estou tentando pegar está dentro do objeto opf. Então como eu devo proceder? Lembrando que se eu tirar a tag logic todos os campos são preenchidos normalmente.
O problema, pelo que entendi acontece porque você está verificando pelo bean matricula no escopo request, e pela action esse bean não existe. Daí ele não exibe a tabela com os campos preenchidos.
Se você tira o logic:present ele exibe a tabela com os campos preenchidos pelo form, certo?
Acho que você tem que colocar o request.setAttribute(“matricula”, objeto matricula) antes do mapping.findForward(“sucesso”);
Não sei se expliquei direito, mas pelos códigos que você colocou, acho que é isso.