Skip to content

Instantly share code, notes, and snippets.

View alexandreaquiles's full-sized avatar

Alexandre Aquiles alexandreaquiles

View GitHub Profile
@alexandreaquiles
alexandreaquiles / exercicio-ajax-json.md
Last active August 29, 2015 14:21
Exercício extra do FJ-21: AJAX retornando JSON com Spring MVC.

No exercício 11.21, a data da finalização não era preenchida ao finalizarmos uma tarefa por AJAX.

No método finaliza do TarefasController, o retorno era void:

@RequestMapping("finalizaTarefa")
public void finaliza(Long id, HttpServletResponse response) {
	//resto do código...
}	
@alexandreaquiles
alexandreaquiles / cep.html
Created May 26, 2015 12:36
Consulta a cep usando AJAX com jQuery.
<html>
<head>
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
</head>
<body>
<script>
function consulta(){
var cep = $("#cep").val();
var url = "http://cep.correiocontrol.com.br/"+cep+".json";
$.get(url, function(dados){

O nosso rodape.jsp está com o ano fixo. O ideal seria que fosse mostrado o ano atual.

  1. Podemos utilizar a tag formatDate para mostrar apenas o ano da data atual. Para isso, temos que importar a taglib fmt:

    <%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
    <hr />
    Copyright <fmt:formatDate pattern="yyyy" value="o que por aqui?" /> - Todos os direitos reservados
  2. Mas o que por no atributo value da tag formatDate? Precisamos passar um java.util.Date com a data atual, fazendo algo com o new Date(). Podemos fazer isso com a tag jsp:useBean:

Pra utilizarmos JAXB, uma biblioteca que transforma de XML pra Java e de Java pra XML e que já vem com a JRE, devemos alterar um pouco as coisas.

  1. O JAXB não funciona bem com imutabilidade. Se quisermos deixar nossa classe Negociacao imutável e usá-la com JAXB, devemos:
    • criar uma versão mutável da classe. Veja a classe NegociacaoMutavel, que tem setters e cujos atributos não são final.
    • criar uma classe que herda de XmlAdapter, fornecendo implementações para o método marshal, que transforma de Negociacao para NegociacaoMutavel, e para o método unmarshal, que transforma de NegociacaoMutavel para Negociacao.
    • anotar a classe Negociacao com @XmlJavaTypeAdapter(NegociacaoAdapter.class)
  2. Outra coisa que não funciona bem com o JAXB são listas. Para que possamos ler um XML que tem uma lista de negociações, precisamos criar uma classe que embrulha a lista, como a classe ListaDeNegociacoes, que tem um atributo lista do tipo List<Negociacao>.. Algumas observações:
    • usamos a
@alexandreaquiles
alexandreaquiles / CargaHorariaServidores.java
Created July 15, 2015 15:03
Versão alternativa do código do post "Manipulando arquivos com recursos do Java 8" do blog da Caelum com sugestões do http://github.com/csokol. Veja em: http://blog.caelum.com.br/manipulando-arquivos-com-recursos-do-java-8/
package cargaHorariaDosServidores;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.TreeMap;
import java.util.function.Function;
import java.util.function.Predicate;
@alexandreaquiles
alexandreaquiles / CargaHorariaServidoresAntigaoComJavaIO.java
Last active August 29, 2015 14:25
Comparação de alternativas que utilizam recursos de diferentes versões do Java para o post: http://blog.caelum.com.br/manipulando-arquivos-com-recursos-do-java-8/
package cargaHorariaDosServidores;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Test
public void shortRegularRental() {
Customer customer = createCustomer();
addRental(customer, "Groundhog Day", Movie.REGULAR, 2);
String expected = "Rental record for Luke\n";
expected += "\tGroundhog Day\t2.0\n";
expected += "Amount owed is 2.0\n";
expected += "You earned 1 frequent renter points";
public class RpnCalculator {
@Test
public void NewCalculatorHas0InItsAccumulator { ... }
@Test
public void NewAccumulatorShouldAllowItsAccumulatorToBeSet { ... }
}
public class ANewlyCreatedRpnCalculatorShould {
private RpnCalculator calculator;
@Before
public void init(){
calculator = new RpnCalculator();
}
@Test
def test_fizzbuzz_de_1_a_20
sequence = []
1.upto(20) do |n|
fizzbuzz = FizzBuzz.new(n)
sequence.push(fizzbuzz.run)
end
assert_equal '1,2,fizz,4,buzz,fizz,7,8,fizz,buzz,11,fizz,13,14,fizzbuzz,16,17,fizz,19,buzz', sequence.join(",")
end