Struts - Formulario de Alteração

5 respostas
I

Galera, é o seguinte.
estou fazendo um crud aqui e estou com problemas na alteração de dados
estou passando um bean atravez do form
Action: aqui está tudo ok.

cadastroForm.setCadastro(DAO.findDados(cadastro)); return mapping.findForward("alterarCadastro");
dentro de cadastro existe algumas campos que quero pegar na jsp

ja tentei de tudo

<bean:define id="cadastro" value="cadastroForm" property="cadastro" scope="page"/>

<c:set var="cadastro" value="cadastroForm" property="cadastro" scope="page"/>

tento recuperar informação aqui.

<html:text property="cadastro.nome"/>
sempre retorna um erro do tipo não encontrar a bean ou o campo.
erro:

javax.servlet.ServletException: Cannot find bean: "org.apache.struts.taglib.html.BEAN" in any scope org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:841) org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:774) org.apache.jsp.jsp.cadastro.alterarCadastro_jsp._jspService(alterarCadastro_jsp.java:285) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085) org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414) javax.servlet.http.HttpServlet.service(HttpServlet.java:627) javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

quando retorno uma lista de registro consigo recuparar facilmente, agora quando retorno atraves deste setCadastro não consigo por nada deste mundo!
alguem pode da um help ae?

5 Respostas

von.juliano

Verifique se a sua tag html:text está dentro de tags html:form</html:form>.

Outra coisa, na sua action, coloque o que você quiser passar para a jsp no request, por exemplo:

request.setAttribute("cadastro", cadastroForm);Assim as tentativas que você postou vão funcionar.

Blz? Flw! :thumbup:

von.juliano

Um site interessante, sobre erros comuns do struts:

http://www.geocities.com/Colosseum/Field/7217/SW/struts/errors.html

I
von.juliano:
Verifique se a sua tag está dentro de tags . Outra coisa, na sua action, coloque o que você quiser passar para a jsp no request, por exemplo:
request.setAttribute("cadastro", cadastroForm);
Assim as tentativas que você postou vão funcionar.

Blz? Flw! :thumbup:

opa, vlw, realmente tinha esquecido do mas ainda não funcinou.

não quero passar o form setando um atributo no request, nas outras paginas funciona sem isso, principalmente com listas, vou de mostrar uma parte do codigo que funciona. :)
<c:if test="${not empty cadastroForm.listaCadastros}">
			<c:forEach items="${cadastroForm.listaCadastros}"
				var="cadastro">
				<table>
					<thead>	
						<tr>
							<th>Nome</th>
							<th>Idade</th>
						</tr>
					</thead>
					<tr>
						<td><c:out value="${cadastro.nome}" />&nbsp;</td>					
						<td><c:out value="${cadastro.idade}" /></td>
					</tr>
                    
</c:forEach>
 </table>
</c:if>
aqui funciona lindo.. rss agora quando tento fazer isso sem lista, da pala. o que quero fazer é mais ou menos isso:
<table>
					<thead>	
						<tr>
							<th>Nome</th>
							<th>Idade</th>
						</tr>
					</thead>
					<tr>
						<td><html:text property="cadastro.nome"/></td>					
						<td><html:text property="cadastro.idade" /></td>
					</tr>
</table>
acho que para funcionar seria algo do tipo
<c:set var="cadastro" value="cadastroForm" property="cadastro" scope="page"/>
mas não funciona :>

estou quase mudando pra uma lista e pegar o primeiro registro, mas acredito que essa não seja a meneira correta. help!! :>

von.juliano

[quote=igor.cardoso]não quero passar o form setando um atributo no request, nas outras paginas funciona sem isso

acho que para funcionar seria algo do tipo

<c:set var="cadastro" value="cadastroForm" property="cadastro" scope="page"/>

Amigo, acho que não estou entendendo o que você está tentanto fazer. Como você passa os valores nas outras páginas, se não utiliza o request? Em algum lugar você tem que colocar as informações para pegar na página! :wink:

Coloque o código da sua action, acho que seu problema não está claro.

Flw! :thumbup:

I

[quote=von.juliano]

igor.cardoso:
não quero passar o form setando um atributo no request, nas outras paginas funciona sem isso

acho que para funcionar seria algo do tipo

<c:set var="cadastro" value="cadastroForm" property="cadastro" scope="page"/>

Amigo, acho que não estou entendendo o que você está tentanto fazer. Como você passa os valores nas outras páginas, se não utiliza o request? Em algum lugar você tem que colocar as informações para pegar na página! :wink:

Coloque o código da sua action, acho que seu problema não está claro.

Flw! :thumbup:

Fala Von.Juliano, primeiramente muito obrigado pela ajuda.

descobri algumas coisas ontem apos apanha muito.
minha aplicação funciona assim:
se eu setar algo no form dentro da action:

cadastroForm.setCadastro(DAO.findDados(cadastro)); return mapping.findForward("alterarCadastro");
quando utilizo o

<html:form action="/cadastro.do"/> <html:text propert="cadastro.nome"/>
ele ja acha a proriedade.

continuando. ontem quando estava debugando verifiquei e não conseguia puxar os dados depois de setalos, mesmo na action.

como ja estava puto, mudei a maneira de usar isso, utilizei sua dica.

ai ficou assim:

cadastro.setId(request.getParameter("id"));
request.setAttribute("cadastro", DAO.findCadastro(cadastro));
return mapping.findForward("alterarCadastro");

no jsp
sem utilizar html:form
apenas

<form action="cadastro.do?metodo=alterarCadastro">
<table>
<tr>
<td>Nome</td>
</tr>
<tr>
<td><input type="text" id="nome" name="nome" value="${cadastro.nome}"><input text="submit" value="Salvar"></td>
</tr>
</form>

enfim, resolvi o problema de outra maneira, vlw pelo help!

Criado 12 de fevereiro de 2009
Ultima resposta 13 de fev. de 2009
Respostas 5
Participantes 2