JSTL retornando objeto

Pessoal

Estou tentando retornar um objeto para uma tag e depois listar ele na tela porém nao estou conseguindo, estou fazendo da seguinte maneira.

<c:set var="empresa"><%empresaDao.getEmpresaById(1);%></c:set>
 
 <c:out value="${empresa.nm_empresa}"></c:out>

Se eu tentar imprimir dando um out.println dentro do scriplet ele imprime meu objeto porém se eu tentar pegar algum campo dele, por exemplo empresa.nm_empresa ele dá que nao achou a propriedade na classe, ele parece que transformou ela em uma string, porém mesmo sem usar out.println dá certo, ele deveria retornar pra varíavel empresa uma instancia da classe empresa, pra daí eu conseguir pegar os campos, e imprimir em tela.

Fazendo via scriplet funciona ex:

Code:

<%

Empresa empresa = empresaDao.getEmpresaById(1);

out.println(empresa.getNm_Empresa());

%>

Alguma idéia do que pode ser??

Obrigado,

Evandro

Olá,

tente jogar ele no request.

request.setAtrribute(“empresa”, empresa);

ai sim tente imprimir com c:out.

só uma coisa boas praticas em java pedem para que seu atributo quando tiver dois nomes seja escrito desta maneira: nmEmpresa ou invés de nm_empresa.

Abraços

Blz Cabral,

Muito obrigado pela dica de boas práticas, testei aqui o jeito que você me passou e deu certo, queria evitar mesmo o uso de scriplet nas páginas deixando o jsp puro, mas pelo que vi nao tem muito jeito. Fiz do seguinte modo

<%
Empresa empresa = empresaDao.getEmpresaById(1);
request.setAttribute("empresa",empresa);
%>

<c:out value="<br>${empresa.nmEmpresa}" escapeXml="false"></c:out>

Bom acho que é esta maneira correta de fazer né?

Obrigado pela ajuda,

att…

Evandro

Quase isso, só que este código:

<%
Empresa empresa = empresaDao.getEmpresaById(1);
request.setAttribute(“empresa”,empresa);
%>

tem que ficar no seu servlet, ou na action ao invés do jsp :wink:

Abraços

Ricardo Cabral

O Cabral, valeu pela ajuda,

Programava em php, um pouco, na verdade venho da programação desktop, então a gente fica meio perdido né, pensei que eu poderia fazer o posicionamento do registro ali mesmo, vou fazer como vc disse, passar em um servlet e depois redireciono a página.

Aproveitando o embalo, vou perguntar mais uma coisinha, vou querer editar o registro, daí em uma tela jsp eu tenho um form, em php eu fazia um if $acao==seleciona … imprime o valor do select se nao ficava em branco o campo, depois enviava ao servidor.

Posso fazer deste modo também em java, if (acao==seleciona) … depois mando para o servlet com a acao=editar e ele recebe meus parametros e grava?

Obrigado pela ajuda :wink:

abraço

Evandro

Cara não sei se eu entendi direito, mas voce pode dar uma procurada em RequestDispacher, eu não aconselharia você a fazer tudo em uma pagina só e sim dividir as atividades que você tem em páginas diferentes.

Beleza?

Ricardo Cabral

Blz Ricardo, mto obrigado pelas dicas, de pouco em pouco eu chego lá, hehe

abraço,

Evandro

Meu vc pode fazer com que tenha uma servlet que leve direto ao editar.
ai ficaria no action do form.
ou vc tb pode colocar um hiden na pagina que representaria a acao que será executada.
e a servlet interpreta o que esta vindo nele.

so uma dica, procure se policiar para não usar scriptlet na pagina, se realemente precisa é porque vc esta fazendo alguma coisa de errado.
outra coisa tente colocar uma classe de intermedio como regra de negocio para sua servlet ou sua pagina não ficar acdessando diretamente os daos.

pois se amanha vc for utilizar um outro framework web, vai ficar mais facil de vc se adaptar.
:stuck_out_tongue:

Ah tá, blz amigo mto orbrigado pelas dicas, estou usando os Daos, Pojos já para minhas classes, e hibernate também, porém estou com dúvidas de como montar minha página, tipo assim, quando eu for criar um novo registro, tenho uma página que tem meu inputs, com todos os campos de minha tabela, ok, até aí tudo bem, mas quando eu for editar posso usar esta mesma página fazendo um if verificando a acao==“seleciona” e daí imprimindo o value do input que é o valor selecionado, para depois enviar ao servlet ?

No php eu fazia deste modo como citei, não sei se seria a forma correta de se fazer em java.

Valeu pela atenção, abraços,

Evandro

Eu também tinha o costume de fazer assim em php, mais tem alguns poréns.
Em java para garantir a facilidade de manutenção é melhor que você separe as paginas por funcionalidade, use a mesma que você cria para fazer alteração, mais separe a de consulta desta. para garantir assim um código mais limpo.

em php eu fazia um switch da funcionalidade e aquele arquivo php tinha tudo daquela funcionalidade, mais depois vi que não era a melhor maneira de se fazer.

ps: um bom framework para você estudar se o jsf, pois os beans das paginas agrupa os códigos de ações de cada módulo, como tivemos a mesma escola é bem provável que você aprecie também…

Ah tá, blz, acho que estou pegando o espírito da coisa, rs, bom eu fiz o seguinte, tenho uma página que chamo de modelo, é a página que contém menu, cabeçalho e rodapé, daí criei uma página chamada empresas, está página dá um include no arquivo modelo, e também passa como parametro para o modelo a página que ele tem que carregar por exemplo, listaEmpresas.jsp, que serve somente para listar as empresas, daí no lista empresas, o existe o link para editar e excluir, empresas.jsp?acao=seleciona&id=1, ou excluir, que seria mesma coisa, chamando a mesma página, a página empresas.jsp ficou da seguinte maneira

<c:choose>
	<c:when test="${param.acao == null}">
		<c:set scope="session" var="pagina" value="./listaEmpresas.jsp"></c:set>
	</c:when>
	<c:when test="${param.acao == 'novo'}">
		<c:out value="Novo"></c:out>
		<c:set scope="session" var="pagina" value="./frmEmpresas.jsp"></c:set>
		<c:set scope="session" var="novaAcao" value="salvar"></c:set>		
	</c:when>
	<c:when test="${param.acao == 'selecionar'}">
		<c:out value="Seleciona"></c:out>
		<c:set scope="session" var="pagina" value="./frmEmpresas.jsp"></c:set>
		<c:set scope="session" var="novaAcao" value="editar"></c:set>
	</c:when>	
	<c:when test="${param.acao == 'editar'}">
		<c:out value="Edita"></c:out>
	</c:when>
	<c:when test="${param.acao == 'excluir'}">
		<c:out value="Exclui"></c:out>
	</c:when>	
</c:choose>

<jsp:include flush=“true” page="./inc/model.jsp"></jsp:include>

daí na página modelo eu pego a variável página que passei e dou o include na página, ficando assim divido por funções, acredito que seja mais ou menos desta forma que vc esteja falando, daí na hora de executar a ação eu chamo o servlet com a função especifica.

é mais ou menos isto?? hehe tomara que eu nao esteja muito fora do caminho, hehe

valeu, obrigado pela atenção, abraço,

Evandro

não meu velho…

esqueça vc ter uma pagina com com logica para decidir qual include vc vai colocar quem vai decidir isso é a servlet.

se vc queiser coloca include para um top ou um bottom ate que vai, apesar da maeira correta é usar o tiles, mais tudo, mais colocar essas logicas no html, eu não indico nem para fazer mais no php

cada página tera sua funcionalidade e o action do form que vai dizer para qual servlet esta sendo direcionada e a servlte que vai dizer para aonde ela deve ser redirecionada caso tenha sucesso.

Humm, entendi, hehe, eu tava meio que no caminho errado,

Irei mandar então sempre para uma servlet, por exemplo para excluir, empresaExclui?id=1 daí esta servlet faz a validação e exclui o registro redirecionando para o página com a mensagem de exclusão realizada ou negada, o mesmo para a editar, crio uma servlet para seleção, ex: empresaSeleciona?id=1 daí ele verifica e seleciona a empresa, redirecionando daí, para a página com a instancia da empresa já carregada ou para página de erro caso nao exista.

Tomara que seja isto agora, hehe, é mais ou este o conceito de lógica que devo tomar?

Muito obrigado pela ajuda e pela atenção, está me ajudando muito pois a lógica de meu projeto começa por aí,

valeu, abraço

Evandro

É isso mesmo meu brother.

Agora sim, pode seguir este caminho, agora só precisa você ler o livro sobre padrões de projeto que a sun disponibiliza de graça no site.

Lá você vai encontrar varias padrões para quase todas as situações em desenvolvimento web.

Blz, meu amigo muito obrigado pela ajuda :D, vc conhece algum livro em portugues sobre o assunto ?? Padronização, boas práticas de programação… algum destes

Se souber e puder passar os nomes agraço mto.

Valeu pela ajuda, já me ensinou um grande caminho a seguir, fico te devendo uma 8)

abraço,

Evandro

Procure pela tradução de J2ee Patterns da sun.
Este livro me ajudou bastante.

Boa sorte.

Valeu mto obrigado, vou procurar hoje mesmo,

fico de devendo um bera, hehe, abraços

Evandro