Struts 2 - Problema com interceptor fileupload e perda do list s:select

2 respostas
P

Boa noite,

Estou precisando de uma ajuda para solucionar um problema, estou desenvolvendo um sistema usando struts 2 + spring e tiles, cirei a seguinte estrutura:

- Uma classe Action chamada ConteudoAction que não extende a ActionSupport (que contem metodos de listar, visualizar e etc) nessa classe chama no editar um formulário aonde tem um select aonde eu populo ele com uma lista de categorias:

- Numa segunda classe Action chamada ExecutaConteudoAction ela extende a ActionSupporte (ela tem o metodo salvar).

O problema é que eu estou enviando uma imagem para salvar e estou usando o interceptador do fileUpload e com isso fazendo uma validação servidor. Ele visualiza a página de edição atravez da Action ConteudoAction e executa o save com o ExecutaConteudoAction mas quando acontece a validação ele precisa retornar para o formulario ele perde o List de categorias e com isso não preenche o select e dá erro.

Eu estou desenvolvento esse site com intuido de por em praticas o meus estudos e por isso gostaria muito de saber como fazer uma validação do lado do servidor dessa forma e não perde o list.

Obs.:
Ele não chega a entra na classe ExecutaConteudoAction pq o arquivo que eu envio é invalido e ele é barrado no Interceptor.

CÓDIGOS

1- ConteudoAction:

package br.com.drslump.action;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;



import br.com.drslump.dto.Categoria;
import br.com.drslump.dto.Conteudo;
import br.com.drslump.dto.Imagem;
import br.com.drslump.dto.Usuario;
import br.com.drslump.service.CategoriaService;
import br.com.drslump.service.ConteudoService;

public class ConteudoAction {

	private ConteudoService conteudoService;
	private Usuario usuario;
	private CategoriaService categoriaService;
	private Conteudo conteudo;
	private List<Conteudo> conteudos;
	private List<Categoria> categorias;
	private Categoria categoria;
	
	public String listar(){
		
		conteudos = this.conteudoService.pegarLista();
				
		return "listar";
	}
	
    public void listagem(){
		
		conteudos = this.conteudoService.pegarLista();
		
		
	}
    
    public String editar(){
    	this.categorias = this.categoriaService.pegarLista();
		this.conteudo = this.conteudoService.pegarPorId(conteudo.getContId());
		return "gerenciar";
	}
    
    public String visualizar(){
    	
    	//Carregar itens da home
		categorias = this.categoriaService.pegarLista();
		
		List<Categoria> categoriasEager = new ArrayList<Categoria>();
		for(Categoria categoriaItem : categorias ){
			categoriaItem.setConteudos(this.conteudoService.pegarConteudoDaCategoria(categoriaItem.getCatId()));
			categoriasEager.add(categoriaItem);
		}
		
		if(categoriasEager != null)
			categorias = categoriasEager;
    	
    	
    	this.conteudo = this.conteudoService.pegarPorId(conteudo.getContId());
    	return "visualizar";
    }
    
    public String excluir(){
		
		if(this.conteudoService.excluir(conteudo)){
			return this.listar();
		}
		return "listar";
			
		
	}
	
	public String gerenciar(){
		
		this.categorias = this.categoriaService.pegarLista();

		
		return "gerenciar";
	}

	public void setConteudoService(ConteudoService conteudoService) {
		this.conteudoService = conteudoService;
	}

	public void setConteudo(Conteudo conteudo) {
		this.conteudo = conteudo;
	}

	public void setConteudos(List<Conteudo> conteudos) {
		this.conteudos = conteudos;
	}

	public void setCategoriaService(CategoriaService categoriaService) {
		this.categoriaService = categoriaService;
	}

	public void setCategorias(List<Categoria> categorias) {
		this.categorias = categorias;
	}

	public List<Categoria> getCategorias() {
		return categorias;
	}

	public void setCategoria(Categoria categoria) {
		this.categoria = categoria;
	}

	public Conteudo getConteudo() {
		return conteudo;
	}

	public ConteudoService getConteudoService() {
		return conteudoService;
	}

	public CategoriaService getCategoriaService() {
		return categoriaService;
	}

	public List<Conteudo> getConteudos() {
		return conteudos;
	}

	public Categoria getCategoria() {
		return categoria;
	}
	
	
	
	
	
}

2- ExecutaConteuudoAction:

package br.com.drslump.action;

import java.io.File;
import java.util.List;
import java.util.Map;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.sun.org.apache.bcel.internal.generic.RETURN;

import freemarker.template.utility.Execute;



import br.com.drslump.dto.Categoria;
import br.com.drslump.dto.Conteudo;
import br.com.drslump.dto.Usuario;
import br.com.drslump.service.CategoriaService;
import br.com.drslump.service.ConteudoService;

public class ExecutaConteudoAction extends ActionSupport{

	private ConteudoService conteudoService;
	private CategoriaService categoriaService;
	private Usuario usuario;
	private Conteudo conteudo;
	private List<Categoria> categorias;
	private Categoria categoria;
	private File attachment;
	private String attachmentFileName;
	private String attachmentContentType; 
	
	public String execute(){
		System.out.println("executou aqui");
		return "input";
		
	}
		
    public String salvar(){
		
		Map session = ActionContext.getContext().getSession();
		this.usuario = (Usuario)ServletActionContext.getRequest().getSession().getAttribute("Usuario");
		this.conteudo.setUsuario(this.usuario);
		this.conteudo.setCategoria(this.categoria);
		
		if(this.conteudoService.salvar(conteudo, attachment, attachmentFileName)){ 
			return "sucesso";
		}else{
			return "input";
		}
		
	 }

	public void setConteudoService(ConteudoService conteudoService) {
		this.conteudoService = conteudoService;
	}

	public void setConteudo(Conteudo conteudo) {
		this.conteudo = conteudo;
	}

	
	public void setCategorias(List<Categoria> categorias) {
		this.categorias = categorias;
	}

	public List<Categoria> getCategorias() {
		return categorias;
	}

	public void setCategoria(Categoria categoria) {
		this.categoria = categoria;
	}

	public File getAttachment() {
		return attachment;
	}

	public void setAttachment(File attachment) {
		this.attachment = attachment;
	}

	public String getAttachmentFileName() {
		return attachmentFileName;
	}

	public void setAttachmentFileName(String attachmentFileName) {
		this.attachmentFileName = attachmentFileName;
	}

	public String getAttachmentContentType() {
		return attachmentContentType;
	}

	public void setAttachmentContentType(String attachmentContentType) {
		this.attachmentContentType = attachmentContentType;
	}

	public Conteudo getConteudo() {
		return conteudo;
	}

	public void setCategoriaService(CategoriaService categoriaService) {
		this.categoriaService = categoriaService;
	}

	
	
	
	
	
	
	
	
	
}

3 - Trecho do struts.xml

<action name="executaconteudo" method="salvar" class="br.com.drslump.action.ExecutaConteudoAction">
				<!-- START INTERCEPTORS -->
					<interceptor-ref name="autenticacao"/>
	        	   	<interceptor-ref name="fileUpload">
		        		<param name="maximumSize">10000</param>
		        		<param name="allowedTypes">image/gif,image/jpeg,image/jpg,image/png</param>
		        	</interceptor-ref>
		        	
		        			        	
	        	<!-- END INTERCEPTORS -->	
							 
	
				<result name="sucesso" type="tiles">/admin.conteudo.success.tiles</result>
				<result name="input" type="tiles">/admin.conteudo.tiles</result>			 
					
				
							
								
			</action>
			
			<action name="conteudo!*" method="{1}" class="br.com.drslump.action.ConteudoAction">
				
				<interceptor-ref name="autenticacao"/>
										
				<result name="listar" type="tiles">/admin.conteudo.lista.tiles</result>
				<result name="gerenciar" type="tiles">/admin.conteudo.tiles</result>
				<result name="input" type="tiles">/admin.conteudo.tiles</result>
				<result name="sucesso" type="tiles">/admin.conteudo.success.tiles</result>
				
			</action>

2 Respostas

P

Desconsiderem o trecho:

public String execute(){  
        System.out.println("executou aqui");  
        return "input";  
          
    }

Estava fazendo testes para ver o funcionamento da Action extendendo a ActionSupport kk.

S

Boaaaaa!!!

To fazendo algo parecido que vc, mas estou usando, struts2 + tiles. O problema é com meu interceptor que nao ta funcionando, tem como vc postar ai o código da sua classe interceptor??

Obrigado.

Criado 25 de outubro de 2011
Ultima resposta 8 de mar. de 2012
Respostas 2
Participantes 2