Seguinte galera…
eu configurei corretamente o struts-config.xml
porém quando eu carrego o formulário, após completar os dados de inserção e clico no botão de submeter e aparece tal erro:
“message Servlet action is not available”
o bean ta correto
o formbean ta correto
o jsp ta correto…
não sei qual é o problema…alguém ja viu isso?
E a sua Action, está correta?
O erro informa que sua Action não está disponível/acessível.
cara tá tudo certo eu acho…o erro continua o mesmo
type Status report
message Servlet action is not available
description The requested resource (Servlet action is not available) is not available.
vou colar aqui a Action…se tiver errado me da um toque
/*
Created on 08/07/2005
TODO To change the template for this generated file go to
Window - Preferences - Java - Code Style - Code Templates
*/
package gastro.controller;
import java.sql.SQLException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import gastro.form.ProdutoForm;
import gastro.beans.Produto;
import gastro.model.CadastroProduto;
/**
@author Diego Mendes
TODO To change the template for this generated type comment go to
Window - Preferences - Java - Code Style - Code Templates
*/
public class ProdutoAction extends Action
{
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse arg3)
throws Exception {
if ("lista".equals(mapping.getParameter()))
return doLista(mapping, request);
else if("insertProduto".equals(mapping.getParameter()))
return doInsert(mapping,(ProdutoForm)form,request);
else
return mapping.findForward("erro");
}
private ActionForward doInsert(ActionMapping mapping, ProdutoForm form, HttpServletRequest request) throws SQLException
{
Produto p = new Produto();
try
{
BeanUtils.copyProperties(p,form);
}
catch(Exception e)
{
e.printStackTrace();
}
try
{
CadastroProduto.cadastraProduto§;
}catch(Exception e){}
return doLista(mapping,request);
}
private ActionForward doLista(ActionMapping mapping, HttpServletRequest request) throws SQLException
{
request.setAttribute(“headerNames”,new String[]{“nome”,“descricao”});
request.setAttribute(“propertyNames”,new String[]{“nome”,“descricao”});
request.setAttribute(“data”,CadastroProduto.getProdutos());
return mapping.findForward(“table”);
}
}
Coloque seus códigos entre as tags [ code] [/ code], ela ficará endentada e de melhor vizualização.
E coloque como está o mapeamento desta action no struts-config
Ta ai o mapeamento…
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<!-- ======================================== Form Bean Definitions -->
<form-beans>
<form-bean
name="clienteForm"
type="gastro.form.ClienteForm"/>
<form-bean
name="produtoForm"
type="gastro.form.ProdutoForm"/>
</form-beans>
<!-- =================================== Action Mapping Definitions -->
<action-mappings>
<action
path="/CadastroProdutoAction"
type="gastro.controller.ProdutoAction"
scope="request"
name="produtoForm"
validate="true"
input="/cadastro_produto.jsp"
parameter="insertProduto">
</action>
</action-mappings>
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,
/WEB-INF/validation.xml"/>
</plug-in>
</struts-config>
Num tá faltando o forward no seu struts-config?
eu tirei ele pra inserir aqui…mas tem sim…
mas teoricamente tá tudo certo…
não está…
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<!-- ======================================== Form Bean Definitions -->
<form-beans>
<form-bean
name="clienteForm"
type="gastro.form.ClienteForm"/>
<form-bean
name="produtoForm"
type="gastro.form.ProdutoForm"/>
</form-beans>
<!-- =================================== Global Forward Definitions -->
<global-forwards>
<forward
name="table"
path="/Table.jsp"/>
<forward
name="ReservaOK"
path="/ReservaOK.jsp"/>
</global-forwards>
<!-- =================================== Action Mapping Definitions -->
<action-mappings>
<action
path="/CadastroProdutoAction"
type="gastro.controller.ProdutoAction"
scope="request"
name="produtoForm"
validate="true"
input="/cadastro_produto.jsp"
parameter="insertProduto">
</action>
</action-mappings>
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,
/WEB-INF/validation.xml"/>
</plug-in>
</struts-config>
como vc está chamando sua action?
Hun, parece-me que está tudo correto, você mapeou o ActionServlet no web.xml?
Pois é…
eu to chamando dessa forma aqui, através do jsp
será q tá aqui o erro???
<%@ page import="org.apache.struts.action.ActionErrors" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<html>
<head>
<LINK REL=STYLESHEET TYPE="text/css" HREF="css1.css">
</head>
<html:errors property="<%=ActionErrors.GLOBAL_ERROR%>"/>
<html:form action="/CadastroProdutoAction">
<html:messages id="error" property="name">
<font color="red"><bean:write name="error"/></font>
</html:messages>
<p>Nome: <html:text property="nome"/>
<p>Descrição: <html:text property="descricao"/>
<html:submit/>
</html:form>
</html>
Cara nem toquei no web.xml…
eu não sabia que precisava configurar…
mas como configuro se a geração dos servlets é automático???
ta ai o meu web.xml abaixo
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>application</param-name>
<param-value>ApplicationResources</param-value>
</init-param>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- The Usual Welcome File List
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
-->
<!-- Struts Tag Library Descriptors -->
<taglib>
<taglib-uri>/tags/struts-bean</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/tags/struts-html</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/tags/struts-logic</taglib-uri>
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/tags/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>
</web-app>
O mapeamento já está aí.
Hun, você colocou o struts.jar no CLASSPATH ou no lib da sua aplicação?
tem que setar no classpath variables é?
eu coloquei no lib da aplicação sim…
eu instalei hoje o tomcat 5 aqui…por acaso eu não tenho que setar algo no server.xml ou em algum arquivo de configuração pra rodar servlets??
mas eu acho que tá tudo certo…
Experimenta setar o struts.jar no CLASSPATH, porque ele não tá achando o seu ActionServlet.
mas qual variável eu seto?
Não tem uma variável chamada CLASSPATH já criada? Sò adiciona o struts.jar nela, caso não exista crie uma CLASSPATH com o valor sendo o caminho completo do struts.jar
[edit]Não esqueça de reiniciar o Tomcat depois.
ja ta setado…e o erro permanece!
passos
Julho 12, 2005, 9:18am
#18
[quote=diegom]Ta ai o mapeamento…
[code]
<action
path="/CadastroProdutoAction"
type="gastro.controller.ProdutoAction"
scope="request"
name="produtoForm"
validate="true"
input="/cadastro_produto.jsp"
parameter="insertProduto">
</action>
[/code][/quote]
Na sua action vc esta apontando o seu form para gastro.form.ProdutoForm esta classe existe?
olá,
pelo que está no seu web.xml acho que vc deveria chamar sua action usando a extensão .do
<html:form action="/CadastroProdutoAction.do">
mas pelo que sei não preciso configurar o web.xml…
é necessário???
respondendo a outra questão: sim! existe a classe!