Tags struts 2

7 respostas
R

Pessoal estou tentando listar alguns valores da tela usando as tags do struts mais quando e para exibir a tela esta dando erro, segue o erro e minha pagina para exibir os dados.

<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib uri="http://displaytag.sf.net" prefix="display" %>
<%@ page contentType="text/html; charset=ISO-8859-1"%>

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
		<title>Vendas Geral Dados Diários</title>
	</head>
		<body>	
			<s:form>
				<s:iterator>
					<h4 align="center">Vendas Geral Dados Diários</h4>	
					<table border="0">
							<tr>
								<td>
									<label><b>Data:</b></label>
									<s:date name="dataDe" format="dd/MM/yyyy" />
								</td>	
							</tr>
							<tr>
								<td>
									<label><b>Dia da Semana:</b></label>
								<%-- <% int dia = dataDe.getDay()+1; %> --%>
								</td>
							</tr>
							<tr>
								<td>
									<label><b>Numeros de Operadores que trabalharam:</b></label>
									<s:property value="relaTO.numeroOperadores"/>
								</td>
							</tr>
							<tr>
								<td>
									<label><b>Numeros de logradouros ativos:</b></label>
									<s:property value="relaTO.numeroLogradouros"/>
								</td>
							</tr>					
							<tr>
								<td>
									<label><b>Vendas total em talões:</b></label>
									<s:property value="relaTO.vendidos"/>
								</td>
							</tr>
							<tr>
								<td>
									<label><b>Numeros de Operadores que venderam:</b></label>
									<s:property value="relaTO.numeroOperadoresVenderam"/>
								</td>
							</tr>
					</table>
				</s:iterator>
			</s:form>
		</body>
</html>
14:27:40,390 ERROR [[jsp]] Servlet.service() for servlet jsp threw exception
The Struts dispatcher cannot be found.  This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has passed through its servlet filter, which initializes the Struts dispatcher needed for this tag. - [unknown location]
	at org.apache.struts2.views.jsp.TagUtils.getStack(TagUtils.java:60)
	at org.apache.struts2.views.jsp.StrutsBodyTagSupport.getStack(StrutsBodyTagSupport.java:44)
	at org.apache.struts2.views.jsp.ComponentTagSupport.doStartTag(ComponentTagSupport.java:48)
	at org.apache.jsp.pages.relatorio.visualizarRelatorios.vendasGeralDiarias_jsp._jspx_meth_s_005fform_005f0(vendasGeralDiarias_jsp.java:102)
	at org.apache.jsp.pages.relatorio.visualizarRelatorios.vendasGeralDiarias_jsp._jspService(vendasGeralDiarias_jsp.java:77)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
	at java.lang.Thread.run(Unknown Source)

7 Respostas

vinicius_roc

Estou começando agora com Struts 2, por isso não poderei te ajudar muito mas no link abaixo tem um excelente tutorial de Struts 2, espero q te ajude:

http://www.roseindia.net/struts/struts2/

Abss

R

valeu vinicius_roc

então eu consegui exibir a data mais as outras informações nada… acho que o problema e na minha jsp mesmo

porque até a Action os valores estão todos preenchidos mais quando abre a tela não exibe os demais valores dos

campos apenas a data.

se alguém poder ajudar valeu…

A

Essa mensagem de erro que aparece indica que provavelmente a requisição que você realizou não passou pelo filtro do struts 2, ou que o filtro está configurado de forma muito restritiva no seu arquivo web.xml.
Se a sua requisição não passar pelo filtro do struts as tags não poderão ser utilizadas, por isso a data aparece (pois não utiliza recursos do struts 2, apenas do jsp) e as demais tags que dependem do struts não são exibidas.
Provavelmente você deve ter utilizado uma url para acessar o arquivo JSP que não passa pelo filtro do struts e ai você não consegue usar as tags.

Primeira coisa verifique se o filtro está configurado corretamente (exemplo abaixo):

<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
  <display-name>My Application</display-name>
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app

Quando for acessar a página acesse a Action do Struts ao invés da página jsp diretamente:
http://servidor/aplicacao/NomeDaAcao.action
ao invés de
http://servidor/aplicacao/NomeDoJSP.jsp

R

Adriano no xml esta desta forma… há algo errado ?

e a pagina que deve exibir os dados esta sendo exibida como http://servidor/aplicacao/NomeDaAcao .action

<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>Parking Rio</display-name>
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>*.action</url-pattern>
    </filter-mapping>
</web-app>
A

Humm, está tudo certo com o seu web.xml (aliás o seu está mais correto e de acordo com a última versão do struts, a 2.1) eu consegui simular a mesma mensagem de erro que vocẽ está recebendo, mas ela só é disparada para mim aqui quando eu acesso diretamente o jsp e não a action.

Você pode postar o seu código da Classe Action e do struts.xml?

R

Adriano meu struts.xml esta assim

<action name="listarRelatorio" class="com.oesia.parkingrio.relatorio.action.RelatorioDadosDiariosAction" method="visualizarRelatorio">
		<result name="sucess">/pages/relatorio/visualizarRelatorios/vendasGeralDiarias.jsp</result>
	</action>

no botão que chama meu metodo esta assim

<s:submit theme="simple" cssClass="bigButton" action="listarRelatorio" value="Visualizar Relatório"></s:submit>

e aqui e meu metodo que esta com todos os valores preenchidos na Action esta aqui

public String visualizarRelatorio(){
		try {
			RelatorioDadosDiariosService relatorioDadosDiariosService = ServiceFactory.getRelatoriosDadosDiariosService();
			SortedMap<String, Collection<RelatorioTO>> relatorios =  relatorioDadosDiariosService.gerarRelatorioDadosDiarios(dataDe);
			for(RelatorioTO relaTO : relatorios.get("relatorioVendaGeralDiarias")){	
				new SimpleDateFormat("dd/MM/yyyy").format(dataDe);
				//int diaDaSemana = dataDe.getDay()+1;	
				//dataDe.setDate(diaDaSemana);
				relaTO.getNumeroOperadores();
				relaTO.getNumeroLogradouros();
				relaTO.getVendidos();
				relaTO.getNumeroOperadoresVenderam();				
				double mediaPorOperador = relaTO.getVendidos().doubleValue() / relaTO.getNumeroOperadores().doubleValue();				
				double mediaOperadorVenderam = relaTO.getVendidos().doubleValue() / mediaPorOperador;
				
				vendasGeralDiarias.add(relaTO);
			}	
			
		} catch (Exception e) {
			e.printStackTrace();
			return "erroGeral";
		}
		return "sucess";
	}
A

Olá rossan,

Estava vendo o código do botão <s:submit> e reparei que a action está definida nele, nesse caso, se a action do botão submit for diferente da action definida na tag <s:form> o formulário é submetido para a action definida no <s:form> (para a própria página se nenhuma action tiver sido definida) e o struts faz um forward para a ação definida no <s:submit>.

Em alguns casos o servlet container por padrão não aplica os filtros definidos no web.xml a requisições do tipo “forward” somente às requisições do tipo “request”, a menos que seja definido no web.xml que as requisições do tipo “forward” sejam recebidas pelo filtro também, isso justificaria o fato de mesmo o seu web.xml estando correto a sua requisição não passar pelo filtro do struts. Este é um problema documentado do struts 2 (na realidade é a forma como o servelt container está configurado), você pode ver com mais detalhes em: https://issues.apache.org/struts/browse/WW-2640

Não consegui simular o erro aqui, mas se for isso, basta você fazer um teste colocando esta configuração no web.xml

<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
<!-- Agora tem que passar em qualquer circunstância  :-) -->
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
Criado 17 de agosto de 2009
Ultima resposta 19 de ago. de 2009
Respostas 7
Participantes 3