Struts + logic present

Olá a todos,

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:

<logic:present scope="request" name="matricula">
	<table align="center" width="70%">
		<tr><td colspan="2" align="center"><font size="3" color="navy">A pesquisa retornou:</font></td>
		</tr>
		<tr><td><bean:message key="app.solitanteosmat" /></td>
			<td><html:text property="matricula" readonly="true"/></td>
		</tr>
		<tr><td><bean:message key="app.solicitanteosemail" /></td>
			<td><html:text property="email" readonly="true"/></td>
		</tr>
		<tr><td><bean:message key="app.descricaoos" /></td>
			<td><html:textarea property="descricao" readonly="true"/></td>
		</tr>
		<tr><td><bean:message key="app.servicoosconsulta"/></td>
			<td><html:text property="servico" readonly="true"/></td>
		</tr>
		<tr><td><bean:message key="app.dataos" /></td>
			<td><html:text property="data" readonly="true"/></td>
		</tr>				
		<tr><td><bean:message key="app.horarioosconsulta"/></td>
			<td><html:text property="horario" readonly="true"/></td>
		</tr>				
	</table>
</logic:present>

Antes que perguntem esse treço de código está dentro de um form, mas o que eu estou fazendo de errado?

Muito Obrigado

Na sua action você está fazendo um

request.setAttribute(“matricula”, objMatricula)?

[quote=agasea]Na sua action você está fazendo um

request.setAttribute(“matricula”, objMatricula)?[/quote]

O que eu faço é o seguinte:

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.

Muito Obrigado

Flws

Você está usando jsp:useBean?

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.

[quote=agasea]Você está usando jsp:useBean?
[/quote]
Não estou usando nao! Teria que usar?

Certissimo! Mas entçao tem como eu pegar o valor do bean que ta no action na pagina e verificar a propriedade matricula deste bean?

Muito obrigado

Para isso você tem que fazer o que eu falei do request.setAttribute na action.

Mas de qualquer forma, do jeito que está, vai exibir os dados do form e não os dados da bean.

Muito obrigado pela resposta consegui fazer.