Erro besta - Struts!

9 respostas
thiagorani

Olha pessoa,

Meu index, apos validar o usuário redireciona para o arquivo principal.jsp

<action-mappings>
	
		<action type="com.montesuafesta.actions.LoginAction" path="/login" name="loginForm" scope="request" validate="true" input="/admin/index.jsp">
      		<forward name="sucesso" path="/web/principal.jsp"/>
    	</action>
	
	</action-mappings>

Principal.jsp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<HTML>
<HEAD>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ page 
language="java"
contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"
%>
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<META name="GENERATOR" content="IBM WebSphere Studio">
<TITLE><bean:message key="index.web.titulo"/></TITLE>
</HEAD>
<FRAMESET rows="29%,71%">
	<FRAME src="teste.jsp">
	<FRAME src="conteudo.jsp">
	<NOFRAMES>
	<BODY>
	</BODY>
	</NOFRAMES>
</FRAMESET>
</HTML>

Só que ele nao carrega os arquivos topo.jsp e conteudo.jsp

Ele indica no console que o principal.jsp foi startado, pois aparece:

/web/principal.jsp: init

Esses dois arquivos, topo e conteudo estão no mesmo diretório, “Web Content/web/arquivos”

Alguem sabe porque?

9 Respostas

thiagorani

Ao acessar assim funciona:

http://p0022:9080/montesuafesta/web/principal.jsp

Assim, não:

http://p0022:9080/montesuafesta/login.do

:?: :?: :?: :?: :?: :?: :?:

thiagorani

Ao acessar assim funciona:

http://p0022:9080/montesuafesta/web/principal.jsp

Assim, não:

http://p0022:9080/montesuafesta/login.do

:?: :?: :?: :?: :?: :?: :?:

R

Ainda tem pouca informação para matar a charada. O que LoginAction faz? Vc ja tentou debugar? Será que pela action ocorre algum problema não tratado por vc, e como não existe forward de erro … !? Provavelmente vc acessa o jsp direto pq não passa pelo controller e seu erro deve ocorrer ou na action ou no formBean.

Bem não da para adivinhar sem mais informações, da uma olhada e tenta debugar e qualquer coisa pode postar que tentaremos ajudar!!

Valeu.

Bruno_Cardoso

definiu a class Action no web.xml? e mapeou-a para os “*.do” ?

thiagorani

E ae richardson, beleza?

Entao cara nem ocorre erro, ele carrega o init do principal, mas se perde ao carregar os arquivos do frame, topo.jsp e conteudo.jsp!
Não estora exception no console do App Server, eu tenho tratamento de erro mapeado!
Se eu efetuo o login, ele redireciona para o principal.jsp, mas nao carrega os arquivos, depois pela url ele carrega!
Muito estranho!
O loginAction seta os modulos que o usuario tem acesso no sistema, e essa informacao é lida no topo.jsp, primeiro eu tento me logar, ele carrega as informaoes mas nao carrega os jsp, fica essa url:

http://p0022:9080/montesuafesta/login.do

depois eu acesso:

http://p0022:9080/montesuafesta/web/principal.jsp

e ele monta os frame, carrega a página! Os dados do usuário, etc …

Se estivesse dando exception, estaria no console, mas nao aparece nada, apenas que o init do principal.jsp foi carregado!

R

Assim é complicado, eu teria quer ver sua action, seu formBean e os arquivos de configuração para entender o que esta errado.

B

Então para resolver isso e ter um maior controle sobre suas paginas que tal usar Tiles? é apenas uma ideia pois nunca aconteceu algo assim comigo e sempre uso Tiles… :smiley:

thiagorani

Voce trabalha com Frames tbem?
Oq seria esse Tiles?

Sabe oq parece que esta acontecendo, sempre que o jsp é carregado depois de um forward do front-controller ele perde as referencias, ele retorna para o jsp, mas nao pega mais as imagens, nao carrega os arquivos!

Pq será?

R

:arrow: Quanto ao seu erro anterior

thiagorani, com os screenshots que recebi tudo ficou claro para mim :smiley: ! Você esta fazendo tudo correto no Struts, não existe o menor erro :!:

Ue, e pq esses problemas???

É o seguinte, quando o Struts da um forward ele faz um “redirecionamento” a nível de servidor e não de browser como no redirect, então a url da chamada não muda e o cliente não tem como encontrar os arquivos por um caminho relativo.

Uma solução para isso, seria vc definir um url base para o seu sistema, vc pode fazer isso de várias formas, a mais simples na minha opinião é definir no cabecalho da página um <base href>.

Essa é uma tag html definida pelo w3c para adiniconar uma url base. Funciona da seguinte maneira:

Vc colocaria no html do seu frame a seguinte tag

&lt;base href="http&#58;//meuUrlBase"&gt;

No seu caso poderia ficar assim

&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"&gt; 
&lt;%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %&gt; 
&lt;%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %&gt; 
&lt;html&#58;html&gt; 
&lt;HEAD&gt; 
&lt;%@ page 
language="java" 
contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1" 
%&gt; 
&lt;META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt; 
&lt;META name="GENERATOR" content="IBM WebSphere Studio"&gt; 
&lt;base href="http&#58;//p0022&#58;9080"&gt;
&lt;TITLE&gt;&lt;/TITLE&gt; 
&lt;/HEAD&gt; 

&lt;FRAMESET frameborder="0"&gt; 
   &lt;FRAMESET cols="23%,77%"&gt; 
      &lt;FRAME name="menu" src="montesuafesta/admin/menu.jsp"&gt; 
      &lt;FRAME name="conteudo" src="montesuafesta/admin/conteudo.jsp"&gt; 
   &lt;/FRAMESET&gt; 
&lt;/FRAMESET&gt; 
&lt;/html&#58;html&gt;

Veja que como sua url base é http://p0022:9080, todos os seus links devem ter como partida essa url, então o que antes era menu.jsp agora deve ser montesuafesta/admin/menu.jsp. Isso serve para as imagens do seu sistema tb.

Um sujestão é colocar o valor do <base href> em um properties.

:arrow: Quanto ao Tiles http://jakarta.apache.org/struts/userGuide/dev_tiles.html

Criado 26 de novembro de 2003
Ultima resposta 30 de nov. de 2003
Respostas 9
Participantes 4