[Logo] Neo Framework Forum
  [Search] Busca   [Recent Topics] Tópicos Recentes   [Members]  Lista de Usuários   [Groups] De volta para a página principal 
[Register] Registrar / 
[Login] Entrar 
Mensagens enviadas por: michael-pr  XML
Perfil de michael-pr -> Mensagens enviadas por michael-pr [9]
Autor Mensagem
Ok, pesquisando uma outra duvida, obtive a resposta

Code:
  <t:detalhe name="arquivos" >
         	   <t:property name="id"/>	
         	   <t:property name="arquivo" showRemoverButton="false" transientFile="true" />
         	   <t:acao>
         	   <n:link url="/secured/anexoPendencia?id=${pendencia.arquivos[index].id}"  type="BUTTON" >download</n:link>        	   
         	   </t:acao>
           </t:detalhe>
 
Opa

agora preciso fazer o link para o download no jsp
como façoa pra montar um link passando o id do registro que eu quero?

eu fiz no jsp:

Code:
  <t:detalhe name="arquivos" >
         	   <t:property name="id"/>	
         	   <t:property name="arquivo" showRemoverButton="false" transientFile="true" />
         	   <t:acao>
         	   <n:link url="/secured/anexoPendencia?id=${bean.arquivos.id}"   >download</n:link>        	   
         	   </t:acao>
           </t:detalhe> 
 
 


mas o link gerado não imprime o id
Opa,

pra quem ta acompanhando segue o codigo pra fazer download do anexo que está no banco
Code:
 @Controller(path="/secured/anexoPendencia",authorizationModule=CrudAuthorizationModule.class)
 public class AnexoPendenciaController extends MultiActionController{
 
 	AnexoPendenciaService anexoPendenciaService;
 	
 	public void setAnexoPendenciaService(AnexoPendenciaService anexoPendenciaService) {
 		this.anexoPendenciaService = anexoPendenciaService;
 	}
 	
 	
 	@DefaultAction
 	public ModelAndView doDownload(WebRequestContext request,Usuario usuario){
 		Long id  = new Long(request.getParameter("id"));
 		AnexoPendencia bean = new AnexoPendencia(id);
 		bean = anexoPendenciaService.load(bean);	
 		Resource resource = new Resource(bean.getTipoconteudo(), bean.getNome(), bean.getConteudo());
 		resource.setSize(bean.getTamanho().intValue());		
 		return new ResourceModelAndView(resource);
 	}
 
 }
Opa,

revisando a implementação acima eu percebi que
se voce alterar os valores da tela principal (pendencia), os anexos eram alterados tambem devido ao save.saveOrUpdateManaged("arquivos");
no PendenciaDAO. Então eu alterei essa parte para:

Code:
 @Override
 	public void updateSaveOrUpdate(final SaveOrUpdateStrategy save) {
 	     save.saveOrUpdateManaged("pendenciasDelegadas");
 	     
 	     Pendencia bean = (Pendencia)save.getEntity();
 	     List<AnexoPendencia> arquivos = bean.getArquivos();
 	     for (AnexoPendencia anexo: arquivos) {    	 
 	    	 if ((anexo.getArquivo() != null) && (anexo.getArquivo().getSize()>0)) {
 	    		 anexo.setNome(anexo.getArquivo().getName());
 	    		 anexo.setTipoconteudo(anexo.getArquivo().getContenttype());
 	    		 anexo.setTamanho(anexo.getArquivo().getSize());
 	    		 anexo.setConteudo(anexo.getArquivo().getContent());
 	    		 anexo.setTsmodificacao(anexo.getArquivo().getTsmodification());
 	    		 anexo.setPendencia(bean);
 	    		 anexoPendenciaDAO.saveOrUpdate(anexo);
 	    	 }
 	     }
 	 }	
 


agora ta inserindo e alterando certo.
mas nem tudo são flores....
o remover anexo tambem vou ter que fazer na unha,
e ai que surge o problema.
1- eu poderia criar um controler e colocar um botão remover so pra ir no banco de dados e remover um a um o anexo gravado.
2- eu poderia aproveitar o botão criado no <t:detalhe name="arquivos"> do jsp, mas a maneira de fazer isso é comparnado a lista que ta gravado no banco, com a lista que chega da bean (Pendencia)save.getEntity().getArquivos();

Pedro, Hugo o que acham?
Valeu Hugo,

voce me deu uma luz então eu fiz assim:

na bean principal eu fiz o relacionamento um-para-muitos normal.

Code:
 @OneToMany(cascade={CascadeType.PERSIST, CascadeType.REMOVE}, mappedBy="pendencia")
 	public List<AnexoPendencia> getArquivos() {
 		return arquivos;
 	}
 	public void setArquivos(List<AnexoPendencia> arquivos) {
 		this.arquivos = arquivos;
 	}
 


no bean filhos ficou assim:

Code:
 
 public class AnexoPendencia implements Serializable {
 	
 	private static final long serialVersionUID = 1L;
 	protected Long id;
 	protected Arquivo arquivo;
 	protected Pendencia pendencia;
 	protected String nome;
 	protected String tipoconteudo;
 	protected Long tamanho;
 	protected byte[] conteudo;
 	protected Timestamp tsmodificacao;
 
 	public AnexoPendencia() {
 	}
 
 	public AnexoPendencia(Long id) {
 	this.id = id;
 	}
 
 	@Id
 	@GeneratedValue(strategy=GenerationType.AUTO, generator="gen_anexo_pendencia")
 	public Long getId() {
 	return id;
 	}
 
 	@ManyToOne(fetch=FetchType.LAZY)
 	@JoinColumn(name="id_pendencia")	
 	@Required
 	public Pendencia getPendencia() {
 		return pendencia;
 	}
 
 	@Transient
 	public Arquivo getArquivo() {
 		if (arquivo == null && id != null) {
 			arquivo = new Arquivo();
 			arquivo.setCdfile(id);
 			arquivo.setContent(conteudo);
 			arquivo.setContenttype(tipoconteudo);
 			arquivo.setName(nome);
 			arquivo.setSize(tamanho);
 			arquivo.setTsmodification(tsmodificacao);			
 		}
 		return arquivo;
 	}
 
 	public void setArquivo(Arquivo arquivo) {
 		this.arquivo = arquivo;
 	}
   // demais gettes and settes
 
 


no PendenciaDAO sobrescrevi os metodos:

Code:
 @Override
 	public void updateEntradaQuery(QueryBuilder<Pendencia> query) {
 		query.fetchCollection("pendenciasDelegadas");
 		query.fetchCollection("arquivos");
 	}
 	
 	@Override
 	public void updateSaveOrUpdate(final SaveOrUpdateStrategy save) {
 	     save.saveOrUpdateManaged("pendenciasDelegadas");
 	     
 	     Pendencia bean = (Pendencia)save.getEntity();
 	     List<AnexoPendencia> arquivos = bean.getArquivos();
 	     for (AnexoPendencia anexo: arquivos) {
 	    	 anexo.setNome(anexo.getArquivo().getName());
 	    	 anexo.setTipoconteudo(anexo.getArquivo().getContenttype());
 	    	 anexo.setTamanho(anexo.getArquivo().getSize());
 	    	 anexo.setConteudo(anexo.getArquivo().getContent());
 	    	 anexo.setTsmodificacao(anexo.getArquivo().getTsmodification());
 	     }
 	     
 	     save.saveOrUpdateManaged("arquivos");	     
 	 }	
 


e na view pendenciaEntrada.jsp

Code:
 ...
 </t:detalhe>
         <t:detalhe name="arquivos">
         	   <t:property name="arquivo"/>
           </t:detalhe>  
           
 	</t:janelaEntrada>
 </t:entrada>
 


ok, ele inseri, altera e apaga gravando no banco blz.
so que agora preciso fazer download, e o arquivo do neo view.DownloadFileServlet so faz download de arquivo fisico.

vou ter que fazer um Servlet pra baixar do banco ou alguem tem algum pronto?

Blz Pedro,

em relação a lista, tambem dá pra fazer uma query específica e mandar a lista para o itens da property. o que acha?

agora quanto a lista de arquivos se vc puder me mandar eu agradeço
michael (em) maikosoft.com.br
Salve javaneses!

duas duvidas:

1- Como faço para filtrar a lista(combo) que vem preenchida de de um relacionamento ManyToOne? Explico: Imagine um cadastro de cidades com a opção Capital, e outro cadastro de pessoa no qual vincula-se uma cidade, mas as opções oferecidas do combo cidade so devem constar as capitais.

2- na aplicação de demostração do neo existe um exemplo de upload de arquivo, mas eu posso vincular somento um arquivo a uma pessoa,
como ficaria se eu quisesse vincular mais de um arquivo. ex. um email com vários anexos.

Grato desde já
Boa tarde Pedro,

obrigado pelas boas vindas, e parabens pelo trabalho do neo framework.

agora quanto a duvida, eu havia pensado em fazer isso, mas o problema
é que a mensagem de erro, caso o usuario esteja bloqueado, é de login e senha. o que não é correto. eu pensei em implementar algo assim:


Code:
 User userByLogin = autorizacaoDAO.findUserByLogin(login);
 if(userByLogin != null && userByLogin.getPassword().equals(usuario.getPassword())){
 				if (!userByLogin.isActive()) {
 					request.addMessage("Usuário bloqueado", MessageType.ERROR);
 				} else {
 					request.setUserAttribute("USER", userByLogin);
 					request.setUserAttribute(MenuTag.MENU_CACHE_MAP, null);
 					return new ModelAndView("redirect:"+AFTER_LOGIN_GO_TO);
 				}
 			} else 
 			request.addMessage("Login e/ou senha inválidos", MessageType.ERROR);
 
 


Salve Javaneses,

estou implementando o exemplo crud fornecido pelo neo framework, e surgiu a seguinte duvida em relação ao campo bloqueado da entidade usuario.

o campo existe no banco de dados mas no processo de autenticação (controler login) ele não interfere.

uma ideia seria colocar o metodo isActive na interface br.com.linkcom.neo.authorization.User
 
Perfil de michael-pr -> Mensagens enviadas por michael-pr [9]
Ir para:   
Powered by JForum 2.1.7 © JForum Team