Archive for the 'frameworks' Category

Projeto em fase de finalização

Depois de quase 5 meses de muita discussão e correria de implementação, podemos dizer que o projeto aqui está em fase de finalização. É claro que um projeto (na prática) nunca acaba, afinal sempre existem coisas a se fazer: erros para corrigir ou melhorias para desenvolver. É cargo do gerente dar um basta, colocar limites, preços $$ e prazos nas novas atividades. Infelizmente, o nosso projeto não teve um escopo muito bem definido. Além disso, tivemos muitos problemas burocráticos, problemas de contratação e de mão-de-obra. Isso tudo atrapalhou um pouco o fluxo do projeto. Mas tudo bem, sobrevivemos. Se der tudo certo, até o mês que vem fechamos o desenvolvimento e eu parto para novos rumos. :)

Posso dizer que curti muito Struts 2 (ainda estou curtindo!). Tem umas coisas muito chatinhas, outras do tipo magia negra (afinal é um framework), mas nunca cheguei a pensar: “Nunca mais uso esse framework na vida!”. Acho que a nossa arquitetura facilitou bastante. Ainda estamos utilizando xml para as configurações - poderíamos ter utilizado annotations desde o início. Eu, particularmente, não tenho nada contra xml, não sei porque tanta gente odeia e vê isso como um baita problema em um framework. Acho que essa minha opinião vem do fato de eu estar acostumada a isso… Em Java, as coisas em geral são tão mais complicadinhas (e às vezes mais lentas) que outras linguagens, que um xml não me parece ser um mártir. Enfim… :P

Tenho ido assistir algumas palestras de tecnologias pra web e vejo que as pessoas sempre mencionam as facilidades de drag-and-drop que alguns plugins do Eclipse trazem (eu não curto muito editores). Será que sou só eu que gosto de escrever as coisas na mão? De ter controle do que eu estou fazendo? Eu não sei se eles fazem isso simplesmente pra tentar atrair a galera do Delphi… Pra mim isso não é diferencial. O código gerado sempre é feio, ora em letra maiúscula, ora não possível de ser editável… Essa galera não está formando programadores e sim gerenciadores de IDEs. “Não tem problema ter vários xmls, tem plugins do Eclipse em que você clica, liga, arrasta e solta, e faz a navegação sem ter que olhar pra nenhum desses arquivos!” Por que eu não ía querer olhar pra eles? Não gosto que fiquem escondendo as coisas de mim…

Estou há um tempinho sem postar, tenho trabalhado e estudado bastante. Em épocas de liberação de release, eu e o pessoal aqui viemos trabalhar até fim de semana… Estou com uns snippets legais no github pra publicar, só estou terminando de classificá-los.

Voltei a utilizar o Twitter. É legalzinho, mas ainda não encontrei aquele “tcham” não. Não sei se é porque eu não conheço muita gente por lá ou se é porque não tem muita graça mesmo (pra mim!). Estou a fim de criar um conta no Facebook, quero ver essa tal nova interface que todo mundo está dizendo que é um droga. o.O

Agora vou voltar a estudar um pouco. Bom resto de sábado! :)

Struts 2, como executar e não escapar HTML

Hoje de manhã fiquei sem entender porque uma variável do meu JSP, que guardava conteúdo HTML que vinha do banco, estava “escapando” código HTML. Venho trabalhando com Struts 2 há pouco mais de 3 meses e eu ainda não havia tido a necessidade de “executar” HTML a partir de uma variável. Bom, eu procurei tanto que eu até fiquei um pouco indignada quando descobri que é simples assim desligar o escapamento de HTML na minha tag property:

<s:property value="%{#informativo}" escape="false" />

Isso mesmo, é so atribuir escape para false. O valor default é true. :)

Créditos ao Caio que me deu um toque.

Struts 2, Upload de arquivos

No sistema que estou trabalhando, o usuário tem uma pasta no servidor, onde ele pode inserir arquivos como fotos, certidões, documentos, etc. Para isto, foi preciso descobrir como fazer um upload através do Struts 2. ;)

Vou escrever a receita de bolo aqui. Espero não ter esquecido nada.

1° Colocar no seu form o elemento input file

<s:file name="upload" id="upload" label="Arquivo:"/>  

ps.: Não tente estilizar o botão de upload que aparece, nem mudar o texto do botão. Primeiro porque vai te dar bastante trabalho e segundo que para fazer isso só usando gambiarra.

2° Adicionar um atributo no seu form

<s:form action="minhaAction.action" method="post" enctype="multipart/form-data">  

3° Adicionar alguns atributos na sua action

/**
 * O arquivo a ser feito upload.
 */
private File upload;

/**
 * O nome do arquivo a ser feito upload.
 */
private String uploadFileName;

/**
 * O tipo de arquivo que vem sendo feito upload. 
 */
private String uploadContentType;
  • Gere os getters e setters para estes atributos.

4° Criar um método para subir o arquivo para o servidor

/**
  * Copia do arquivo da pessoa para a máquina de destino.
  *
  * @param in
  * @param out
  * @throws IOException
  */
private void copiarArquivo(File in, File out) 
{
  try 
  {
    // Copia o arquivo para o servidor.
    FileChannel sourceChannel = new FileInputStream(in).getChannel(); 
    FileChannel destinationChannel = new FileOutputStream(out)
        .getChannel();
    sourceChannel.transferTo(0, sourceChannel.size(),
        destinationChannel);
    // Fecha os canais de transferência de conteúdo.
    sourceChannel.close();
    destinationChannel.close();
  }
  catch (IOException ex)
  {
    // Erro ao anexar arquivo.
    ex.printStackTrace();
  }
}

5° Chamar o método criado anteriormente dentro da action envolvida

String pathArquivoSaida = dirPastaUsuario.getAbsolutePath() + File.separator + getUploadFileName();
File arquivoSaida = new File(pathArquivoSaida);
if (!arquivoSaida.exists()) 
{
    arquivoSaida.createNewFile(); 
}
// Solicita a cópia do arquivo para o servidor. 
this.copiarArquivo(getUpload(), arquivoSaida);

6° Fazer download de algumas bibliotecas para upload

  • commons-fileupload.jar
  • commons-io.jar

Adicione-as no seu projeto.

7° Editar o properties do struts

struts.multipart.parser=org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest
struts.multipart.maxSize=2097152
struts.multipart.saveDir=C:\uploads\

8° Editar o struts.xml

<action name="anexarDocumento" class="actions.AnexoAction" method="anexar">
    <interceptor-ref name="fileUpload"/>
    <interceptor-ref name="basicStack"/>
    <result>anexo.jsp</result>
</action>

Meio complicadinho, mas é isso aí. Espero ter ajudado. Qualquer dúvida, mandem-me um comentário. :)

Struts 2, Download de arquivos

Desde o fim do ano passado nosso projeto já passou por dois releases. Isto é, deu pra aprender bastante coisa de Struts 2. ;)

Algo importante que recentemente aprendi, foi permitir que o usuário fizesse o download de algum arquivo do sistema. Bom, com Struts 2 posso garantir que fazer isso é simples. Vou apontar os passos de uma implementação padrão:

1° Criar 3 atributos na action envolvida

private InputStream inputStream;
private String contentType;
private String contentDisposition;

2° Criar os getters e setters para os atributos anteriores

3° Setar os valores para estes atributos dentro da sua action

// Seta o arquivo a fim de que o usuário possa abrí-lo ou salvá-lo pelo navegador. 
this.setInputStream(new FileInputStream(new File(path))); // C:\uploads\foto.jpg
this.setContentType("application/" + tipoFormato); // pdf, rtf, csv...
this.setContentDisposition("attachment; filename=" + nomeArquivo); 

4° Setar estes parâmetros no mapeamento da action no struts.xml:

<action name="abrirDocumento" class="meuPacote.DocumentoAction" method="abrir">
        <result name="success" type="stream">
        <param name="inputName">inputStream</param>
        <param name="bufferSize">1024</param>
        <param name="contentType">${contentType}</param>
        <param name="contentDisposition">${contentDisposition}</param>
    </result>
 </action>

Dependendo do seu objetivo talvez seja importante inserir mais alguns parâmetros no xml (e, consequentemente, mais atributos na sua action). Dêem uma olhadinha aqui para qualquer dúvida ou necessidade.

Esqueci alguma coisa?!

Bom, é isso. Tranquilo, não é? :D

Mini-curso de EJB em Florianópolis

Com o apoio da GUJava (Grupo de Usuários Java), a empresa catarinense V.Office oferece no próximo dia 23 de julho mini-curso “Introdução Enterprise JavaBeans (EJB) 3.0″. Entre os temas abordados estão: Session Bean, Message Driven Bean, Java Persistence API, gerenciamento de Segurança to web, entre outros. O palestrante Rodrigo Cândido da Silva tem mais de oito anos de experiência na área de TI, trabalha para grandes empresas nas áreas de consultoria. Desenvolvimento, treinamento e design de arquiteturas de softwares. Especialista no estudo, ensino e na utilização da Plataforma Java, onde possui as seguintes certificações: SCJA, SCJP, SCWCD, SCBCD e SCEA.

SERVIÇO:

Data: 23 de julho de 2008 (quarta-feira)

Horários:
- Credenciamento às 18h30
- Mini-curso: 19h às 21h

Local: Auditório da ACATE - Rua Lauro Linhares, 589 - (Ático). Trindade. Florianópolis

Inscrições: marli@voffice.com.br ou 48 3025 - 8575

Os participantes devem levar 2 kg de alimento não perecível para doação à entidade carente.

###############

Tenho um amigo que conhece o palestrante e, ao que parece, o cara é bom. Conheço muito pouco de EJB 3.0. A versão que já utilizei para implementação foi uma versão 2.x. Na época, era super pesado e bem complicado. Funcionou, mas foi um trauma… :(

Eu vou! Só falta comprar os quilos de alimento. ;)

Fonte: VOffice

Próxima Página »