Mostrando postagens com marcador ECLIPSE. Mostrar todas as postagens

terça-feira, 31 de janeiro de 2017

Spring MVC sem uso de XML

Fala galera!

Após um período de férias do blog (bem longo por sinal rsrsrs), convido vocês a acompanhar este post, que já faz um bom tempo que queria fazer. Mas agora com o tempo oportuno estou deixando com vocês. Bom, vamos lá!

Spring MVC sem uso de XML


Quando comecei a estudar programação utilizando a linguagem Java, fiquei muito empolgado, pois antes só havia programado utilizando as linguagens C e C++. Confesso que as facilidades que a linguagem proporcionava eram extremamente animadoras - e ainda são.

Porém, com o passar do tempo, percebi que existem alguns frameworks como o Spring, que exigem a configuração utilizando arquivos xml. Era até interessante no começo, mas de acordo que precisava iniciar projetos novos em alguns trabalhos freelancer, vi que estava ficando chato essas configurações.

Bem, com esses "problemas" em mãos resolvi fazer uma pesquisa e encontrei alguns sites que ensinam como organizar seu projeto utilizando o Spring sem o uso de xml. Então, vamos ao código.

Utilizarei o IDE Eclipse Luna com o Spring 4.3.5.

Vamos criar um novo projeto web e configurá-lo para o uso do Maven, onde adicionaremos as seguintes dependências:

        <properties>
  <!-- spring version -->
  <spring.version>4.3.5.RELEASE</spring.version>
 </properties>
 <dependencies>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-core</artifactId>
   <version>${spring.version}</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-web</artifactId>
   <version>${spring.version}</version>
  </dependency>
  <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
   <version>${spring.version}</version>
  </dependency>
 </dependencies>

Agora, no pacote com.deviscoming.config, vamos criar a classe de configuração que será equivalente ao web.xml. Analise o código:


@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"com.deviscoming"})
public class AppConfig extends WebMvcConfigurerAdapter{
 
 @Bean
 public ViewResolver internalResourceViewResolver(){
  InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
  viewResolver.setPrefix("/WEB-INF/views/");
  viewResolver.setSuffix(".jsp");
  return viewResolver;
 }

}


@Configuration: esta annotation informa ao Spring que a nossa classe AppConfig será a classe de configuração do projeto;

@EnableWebMVC: aqui informamos ao Spring que vamos usar o Spring MVC;

@ComponentScan: para não precisarmos criar nossos beans, o Spring nos fornece esta annotation para fazer todo este trabalho para nós :). Na propriedade basePackges é informado qual pacote do projeto será escaneado pelo Spring. 

Lembram daquele trecho de código que existia no DispatcheServlet?


<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 <property name="prefix" value="/WEB-INF/views/" />
 <property name="suffix" value=".jsp" />
</bean>

Pois bem, adicionaremos em nossa classe conforme abaixo:

@Bean public InternalResourceViewResolver internalResourceViewResolver(){
  InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
  viewResolver.setPrefix("/WEB-INF/views/");
  viewResolver.setSuffix(".jsp");
       return viewResolver;
}


A classe InternalResourceViewResolver mostra ao Spring onde estão nossas páginas, então instanciamos a classe e 'setamos' o prefixo e sefixo usando os métodos setPrefix() e setSuffix().

Beleza, já temos a primeira classe para executar nosso projeto. Vamos agora criar outra classe no mesmo pacote da AppConfig e nomearemos de WebAppInitializer. Confira abaixo:


public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{

 @Override
 protected Class[] getRootConfigClasses() {
  return null;
 }

 @Override
 protected Class[] getServletConfigClasses() {
  return new Class[] {AppConfig.class};
 }

 @Override
 protected String[] getServletMappings() {
  return new String[]{"/"};
 }
 
}

Depois estendemos a classe AbstractAnnotationConfigDispatcherServletInitializer e implementamos seus métodos. 

Preste atenção nos métodos getServletConfigClasses() e getServletMappings(). O primeiro você deve informar a classe de configuração, no nosso caso AppConfig.


Pronto! pode executar seu projeto que ele irá funcionar perfeitamente.

É isso aí pessoal, até mais!

;)

terça-feira, 17 de maio de 2016

Debug #8 - Android: teclado sobre o EditText


Fala galera!

Não sei se já comentei aqui no site, mas estou estudando desenvolvimento de aplicativos Android e confesso a vocês, é uma área sensacional. Vale muito se envolver com essa área de desenvolvimento.

Bom, e como todo iniciante (noob ainda rsrsrs) me deparei com um probleminha que custei para descobrir qual a possível solução, pelo menos a que atendeu ao que esperava.


Gostaria de já deixar claro que é aconselhável utilizar o Android Studio, pois é uma IDE completa para este fim e o Google não dá mais suporte para o Android Eclipse Tools (veja aqui).

A ideia é a seguinte, utilizo o Eclipse Mars para desenvolvimento de aplicativos e tenho uma activity chamada activity_main.xml, é uma tela simples com dois campos de texto (EditText) e um label (TextView) para cada (código abaixo).

<LinearLayout android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical" android:scrollbarstyle="insideInset" xmlns:android="http://schemas.android.com/apk/res/android">

    <TextView android:layout_gravity="center" android:layout_height="wrap_content" android:layout_margin="20dp" android:layout_width="wrap_content" android:text="@string/lbl_nova_tarefa">
                  
        <TextView android:id="@+id/lblTitulo" android:layout_ name="code"height="wrap_content" android:layout_margin="10dp" android:layout_width="match_parent" android:text="@string/lbl_titulo">

        <EditText android:id="@+id/edtTitulo" android:inputtype="text" android:layout_height="wrap_content" android:layout_margin="10dp" android:layout_width="match_parent" android:typeface="serif">
        
        <TextView android:id="@+id/lblDesc" android:layout_height="wrap_content" android:layout_margin="10dp" android:layout_width="match_parent" android:text="@string/lbl_descricao">
     
        <EditText android:id="@+id/edtDesc" android:inputType="textMultiLine" android:layout_height="wrap_content" android:layout_margin="10dp" android:layout_width="match_parent" android:scrollbars="vertical">         
</EditText></TextView></EditText></TextView></TextView></LinearLayout>


Pois bem, quando acessava o segundo EditText (@id/edtDesc), o teclado do android ficava sobre o campo, com isso, não era possível visualizar o que era digitado.

Ao acessar o developer.android.com, encontrei o atributo android:windowSoftInputMode. Este atributo, conforme descrito no site, afeta duas coisas:

  • O estado do teclado virtual - se ele está escondido ou visível - quando a atividade torna-se o foco da atenção do usuário.
  • O ajuste feito para a janela principal da atividade - se é redimensionada menores para dar espaço para o teclado virtual ou se o seu conteúdo deslocar para fazer o foco atual visível quando parte da janela é coberto pelo teclado virtual.
Então, para que pudesse solucionar meu problema, utilizei o valor "adjustPan", onde é responsável por redimensionar a janela da activity principal, deslocando o teclado para que o foco atual não seja escondida pelo usuário.
Dessa forma, basta somente adicionar o seguinte código ao seu arquivo AndroidManifest.xml:

android:windowSoftInputMode="adjustPan"

Bom galera, espero que tenham curtido essa dica. Ressalto que o plugin do android para Eclipse não está mais recebendo suporte, pois o Google agora possui uma IDE voltada somente para desenvolvimento Android, o Android Studio. Vale a pena dar uma olhada nessa IDE, possui muitas ferramentas que auxiliam no desenvolvimento do seu aplicativo.
Falarei disso em um próximo post.

Até mais!

;) 

quinta-feira, 21 de abril de 2016

Debug #5 - Problema Starting Tomcat




Fala galera!

Estava trabalhando em um pequeno projeto e me deparei com um problema no Apache Tomcat v8. Aconteceu que, ao tentar executar uma aplicação - utilizo Eclipse Mars - o apache apresentava a seguinte mensagem:



Depois de algumas pesquisas, descobri que era preciso alterar o tempo limite de start do servidor. Existem alguns casos em que o computador demora um tempo maior para iniciar o Apache Tomcat e, caso o tempo definido na configuração do Tomcat seja baixa, a mensagem será apresentada.

Então para resolver este problema, acesse a aba de servidores do Eclipse e clique duas vezes em Apache Tomcat.


Fazendo isso, será aberta uma página com as configurações do Apache Tomcat.

Acesse a aba Timeouts e altere o tempo definido no tempo de Start. No meu caso, defini o tempo de 60 segundos e foi o suficiente para corrigir o problema.


É isso aí! Talvez seu computador precise de mais tempo, então, basta modificar o tempo de acordo com o necessário. Caso não solucione, tente verificar outras configurações do Apache Tomcat e/ou  reinstalar o servidor.

Até mais!