Help - Struts1 + Spring

0 respostas
fabioebner

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
<servlet>
		<servlet-name>action</servlet-name>
		<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
		<init-param>
			<param-name>config</param-name>
			<param-value>/WEB-INF/struts-config/struts-config.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>action</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
	
	<!-- 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>
applicationContext.xml
<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>
struts-config.xml
<struts-config>

	<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>
</struts-config>
EmpresaAction.java
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"));
	
	}
EmpresaService.java
@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;
	}
EmpresaDAO.java
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){
		
	}

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

Criado 19 de maio de 2010
Respostas 0
Participantes 1