Amigos, estou tentando integrar Struts 1 com o Spring, demorei uns dias, porem ontem consegui mas ainda estou com algums problemas, vou postar o codigo aqui e no final eu posto as duvidas, espero que alguem possa me ajudar, segue:
Web.Xml
[code]
action
org.apache.struts.action.ActionServlet
config
/WEB-INF/struts-config/struts-config.xml
1
action
*.do
<!-- Inicialização do Contexto do Spring -->
<listener>
<display-name>context</display-name>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>[/code]
applicationContext.xml
[code]
<context:annotation-config/>
<context:component-scan base-package="br"/>
<aop:aspectj-autoproxy/>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" >
<property name="dataSource">
<ref local="c3p0DataSource"/>
</property>
<property name="annotatedClasses">
<list>
<value>br.com.controlefuncionario.entity.TbConfiguracao</value>
<value>br.com.controlefuncionario.entity.TbEmpresa</value>
<value>br.com.controlefuncionario.entity.TbFeriado</value>
<value>br.com.controlefuncionario.entity.TbFuncionario</value>
<value>br.com.controlefuncionario.entity.TbHistoricoProjeto</value>
<value>br.com.controlefuncionario.entity.TbPrioridade</value>
<value>br.com.controlefuncionario.entity.TbProjeto</value>
<value>br.com.controlefuncionario.entity.TbRendimentoFuncionario</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
<prop key="hibernate.connection.autocommit">false</prop>
</props>
</property>
</bean>
<bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="org.postgresql.Driver"/>
<property name="jdbcUrl" value="jdbc:postgresql://localhost:5432/db_controle_funcionario"/>
<property name="user" value="postgres"/>
<property name="password" value="dna44100"/>
<property name="initialPoolSize" value="5"/>
<property name="minPoolSize" value="5"/>
<property name="maxPoolSize" value="15"/>
<property name="checkoutTimeout" value="1000"/>
<property name="maxStatements" value="50"/>
<property name="testConnectionOnCheckin" value="true"/>
<property name="idleConnectionTestPeriod" value="60"/>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>[/code]
struts-config.xml
[code]
<form-beans>
</form-beans>
<action-mappings>
<action path="/empresa" type="br.com.controlefuncionario.action.EmpresaAction"
name="EmpresaAction" scope="request" input="empresa.do?userAction=iniciaEmpresa"
parameter="userAction" unknown="false" validate="false">
<forward name="iniciaEmpresa" path="/jsp/empresa/cadastraAlteraEmpresa.jsp"
redirect="false" />
<forward name="consulta" path="/jsp/agenda/consulta.jsp"
redirect="false" />
</action>
</action-mappings>
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />
</plug-in>
[/code]
EmpresaAction.java
[code]
public class EmpresaAction extends ActionSupport {
private EmpresaService empresaService;
private WebApplicationContext ctx;
public ActionForward execute(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Exception {
try {
//System.out.println("aeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
//EmpresaForm empresaForm = (EmpresaForm) actionForm;
EmpresaForm empresaForm = new EmpresaForm();
empresaForm.setCdCepEmpresa("adsadas");
empresaForm.setNmEmpresa("nome");
empresaForm.setNmContatoEmpresa("aeeeeeeeeeeeee");
ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServletContext());
empresaService = (EmpresaService) ctx.getBean("empresaService");
empresaService.cadastraEmpresa(empresaForm);
//System.out.println( "aeeaeaeae");
// empresaService.cadastraEmpresa(null);
return (mapping.findForward("iniciaEmpresa"));
} catch (Exception e) {
request.setAttribute("urlFecharErro","agenda.do?userAction=iniciaPesquisa");
e.printStackTrace();
throw new Exception(e);
}
}
public ActionForward cadastrarEmpersa(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Exception {
EmpresaForm empresaForm = (EmpresaForm) actionForm;
new EmpresaService().cadastraEmpresa(empresaForm);
return (mapping.findForward("empresaCadastrada"));
}
public ActionForward alterarrEmpersa(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Exception {
EmpresaForm empresaForm = (EmpresaForm) actionForm;
new EmpresaService().alterarEmpresa(empresaForm);
return (mapping.findForward("empresaAlterada"));
}[/code]
EmpresaService.java
[code]
@Component
public class EmpresaService {
@Autowired
private EmpresaDAO empresaDAO;
public void cadastraEmpresa(EmpresaForm empresaForm){
//cadastrar Empresa
new EmpresaDAO().save(empresaForm.getEntityEmpresa());
}
public void alterarEmpresa(EmpresaForm empresaForm){
//Alterar Empresa
new EmpresaDAO().update(empresaForm.getEntityEmpresa());
}
public List<EmpresaForm> listarEmpresas(){
//Listar todas Empresas
return null;
}
public EmpresaForm getEmpresaById(int cdEmpresa){
//Retorna empresa por id
return null;
}
[/code]
EmpresaDAO.java
[code]Service
public class EmpresaDAO {
private HibernateTemplate hibernateTemplate;
@Autowired
public void setHibernateTemplate(SessionFactory sessionFactory) {
this.hibernateTemplate = new HibernateTemplate(sessionFactory);
}
public void save(TbEmpresa empresa){
System.out.println("aeeeeeeeee");
hibernateTemplate.save(empresa);
}
public void update(TbEmpresa empresa){
}[/code]
Otimo, agora eu estou com 2 problemas,
1º Ele não esta carregando a minha hibernateTemplate, e o engracado e que se eu rodar em modo debug, e colocar um breakpoint no meu setHibernateTemplate, ele passa la, injeta a sessionFactory, porem quando eu clico no meu botao para submitar o meu formulario, ele nao esta injetando. dentro do Service ele injeta o Dao tranquilo, porem dentro do DAO nao injeta o hibernateTemplate, alguem sabe o pq?
2º Antes, no meu formulario eu passava pelo hidden userAction o metodo que eu queria executar da minha classe EmpresaAction, porem dessa forma que eu integrei o Struts nao consigo mais, tenho que obrigatoriamente ter o metodo execute na minha EmpresaAction, tem que ser assim mesmo ou alguma coisa eu nao estou fazendo certo para que eu possa selecionar qual metodo eu quero utiliza??
obrigado