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>