Java Servlets ::: Dicas & Truques ::: URLs, Documentos e Páginas |
Como compartilhar dados entre um Java Servlet e uma página JSP usando a requisição HttpServletRequestQuantidade de visualizações: 8399 vezes |
Quando usamos o método forward() da interface RequestDispatcher para direcionar para um outro Java Servlet ou página JSP, tanto o objeto de requisição ServletRequest quanto o objeto de resposta ServletResponse são enviados também. Assim, podemos tirar proveito desta funcionalidade para compartilhar dados entre um servlet e uma página JSP usando a requisição. Vamos ver como isso é possível. Comece analisando o seguinte servlet: package estudos; import java.io.*; import jakarta.servlet.*; import jakarta.servlet.http.*; public class MeuServlet extends HttpServlet{ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ // cria uma instância da classe Pessoa Pessoa p = new Pessoa(); p.setNome("Osmar J. Silva"); // vamos colocar o objeto p na requisição request.setAttribute("pessoaBean", p); // agora direcionamos para a página exibir.jsp RequestDispatcher dispatcher = request.getRequestDispatcher("/exibir.jsp"); dispatcher.forward(request, response); } } Note que aqui eu já estou usando o pacote jakarta.servlet em vez de javax.servlet. Confirme se você está usando o Java EE ou Jakarta EE. Veja que no método doGet() deste Servlet nós temos a criação de uma instância da classe Pessoa (Pessoa.java). Esta classe tem a seguinte estrutura: package estudos; public class Pessoa{ private String nome; public String getNome(){ return this.nome; } public void setNome(String nome){ this.nome = nome; } } Depois de criada a instância da classe nós a colocamos na requisição atual usando: // vamos colocar o objeto p na requisição request.setAttribute("pessoaBean", p); O passo seguinte é direcionar a requisição atual para a página exibir.jsp (a View do MVC). Veja o código para esta página: <jsp:useBean id="pessoaBean" scope="request" type="estudos.Pessoa" /> <html> <head> <title>Estudos Servlet</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </head> <body> <h4>Nome da pessoa: <jsp:getProperty name="pessoaBean" property="nome" /></h4> </body> </html> Aqui nós estamos usando <jsp:getProperty> para acessar um dos atributos do bean pessoaBean. Poderíamos usar JSTL e EL. Veja: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <jsp:useBean id="pessoaBean" scope="request" type="estudos.Pessoa" /> <html> <head> <title>Estudos Servlet</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </head> <body> <h4>Nome da pessoa: <c:out value="${pessoaBean.nome}"/></h4> </body> </html> Fiz o mapeamento deste Java Servlet para a URL http://localhost:8080/estudos/meuservlet. Ao chamá-la nós teremos o seguinte resultado: Nome da pessoa: Osmar J. Silva |
Java ::: Aplicativos Completos ::: Fontes |
Como criar um visualizador de fontes em Java Swing - Código fonte completoQuantidade de visualizações: 10474 vezes |
Código completo Java: Como escrever um visualizador de fontes em Java Swing Nesta dica eu mostro o código completo para uma aplicação GUI usado Java Swing e que permite visualizar as fontes instaladas no sistema. Ao clicar em uma das fontes exibidas em uma JList, o texto da JLabel é formatado de acordo com a fonte escolhida. Note que montei toda a GUI em código mesmo, ou seja, sem usar o editor visual do Netbeans ou outra IDE. Esse é um bom exercício para entender os elementos que compõem interfaces gráficas do Java Swing. Eis o código completo para o exemplo: package arquivodecodigos; import java.awt.*; import javax.swing.*; import javax.swing.event.*; import java.util.*; public class Estudos extends JFrame implements ListSelectionListener{ JLabel label = new JLabel("Observe este texto"); public Estudos(){ super("Visualizados de Fontes"); String[] fontNames; // nomes das fontes Toolkit toolkit = Toolkit.getDefaultToolkit(); fontNames = GraphicsEnvironment.getLocalGraphicsEnvironment(). getAvailableFontFamilyNames(); Vector fonts = new Vector(); for(int i = 0; i < fontNames.length; i++){ fonts.add(new Font(fontNames[i], Font.PLAIN, 16)); } JList fontList = new JList(fonts); fontList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); fontList.setCellRenderer(new FontCellRenderer()); JScrollPane scrollPane = new JScrollPane(fontList); JPanel p = new JPanel(); p.add(scrollPane); fontList.addListSelectionListener(this); getContentPane().add(p, "Center"); getContentPane().add(label, "South"); setSize(500, 250); setVisible(true); } @Override public void valueChanged(ListSelectionEvent evt){ JList source = (JList) evt.getSource(); Font font = (Font) source.getSelectedValue(); label.setFont(font); } public static void main(String args[]){ Estudos app = new Estudos(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } // Classe personalizada que implementa ListCellRenderer class FontCellRenderer implements ListCellRenderer{ @Override public Component getListCellRendererComponent( final JList list, final Object value, final int index, final boolean isSelected, final boolean cellHasFocus){ return new JPanel(){ @Override public void paintComponent(Graphics g){ super.paintComponent(g); Font font = (Font) value; String text = font.getFamily(); FontMetrics fm = g.getFontMetrics(font); g.setColor(isSelected ? list.getSelectionBackground() : list.getBackground()); g.fillRect(0, 0, getWidth(), getHeight()); g.setColor(isSelected ? list.getSelectionForeground() : list.getForeground()); g.setFont(font); g.drawString(text, 0, fm.getAscent()); } @Override public Dimension getPreferredSize() { Font font = (Font) value; String text = font.getFamily(); Graphics g = getGraphics(); FontMetrics fm = g.getFontMetrics(font); return new Dimension(fm.stringWidth(text), fm.getHeight()); } }; } } Ao executá-lo você terá um resultado parecido com: ![]() |
QGIS ::: PyQGIS API ::: Projeto QGIS - Classe QgsProject |
Como retornar o título do projeto do QGIS usando PyQGIS e a função title() da classe QgsProjectQuantidade de visualizações: 278 vezes |
Em algumas situações nós precisamos obter o título do projeto atual do QGIS. Para isso nós podemos usar a função title() da classe QgsProject da PyQGIS API. Note que o título do projeto do QGIS é definido indo no menu Projeto -> Propriedades. Na janela Propriedades nós acessamos a guia Geral e definimos no campo Título do Projeto o valor que desejamos. Veja o código PyQGIS completo que acessa e exibe o título do projeto em uma mensagem QMessageBox.information: # vamos obter o título do projeto do QGIS titulo = QgsProject.instance().title() # e mostramos o resultado QMessageBox.information(None, "Aviso", "O título do projeto é: " + titulo) Ao executar este código PyQGIS nós teremos um resultado parecido com: O título do projeto é: Estudo hidrológico cliente AFG Rio Verde-GO |
C# ::: Coleções (Collections) ::: ArrayList |
Como escrever um método C# que retorna uma ArrayListQuantidade de visualizações: 17360 vezes |
Estudantes C# ficam um pouco confusos quando solicitados a escrever funções que retornam objetos de classes. E essa confusão é maior ainda quando precisam retornar uma ArrayList, mais precisamente um objeto da classe ArrayList. Esta dica mostra como isso pode ser feito. Veja que temos um método que define, em sua assinatura, que o tipo de retorno não é void (sem retorno) mas sim um objeto da classe ArrayList. No corpo deste método temos a criação da ArrayList propriamente dita, a adição de cinco inteiros e finalmente o uso da palavra-chave return para retornar o ArrayList já preenchido ao chamador do método. Note que o método Main é responsável por efetuar uma chamada ao método, obter o ArrayList resultante e em seguida usar o laço foreach para exibir seus valores: // método que retornará uma ArrayList static ArrayList obterLista(){ // Cria o ArrayList ArrayList lista = new ArrayList(); // Adiciona 5 inteiros lista.Add(1); lista.Add(2); lista.Add(3); lista.Add(4); lista.Add(5); // retorna o ArrayList preenchido return lista; } static void Main(string[] args){ // obtém um ArrayList preenchido a partir do // método obterLista ArrayList mLista = obterLista(); // exibe os valores do ArrayList foreach (int valor in mLista){ Console.Write("{0} ", valor); } // pausa o programa Console.ReadKey(); } |
C# ::: Windows Forms ::: DataGridView |
Como retornar a linha da célula selecionada em um DataGridView do C# Windows FormsQuantidade de visualizações: 23847 vezes |
Muitas vezes precisamos obter a linha atual de uma determinada célula selecionada no DataGridView. Isso pode ser feito por meio da propriedade CurrentRow. Esta propriedade retorna um objeto da classe DataGridViewRow, que representa uma linha no DataGridView. Podemos usar esta classe para obter o índice da linha que contém a célula selecionada, percorrer todas as células de uma determinada linha, etc. Veja um trecho de código no qual usamos a propriedade CurrentRow para obter o DataGridViewRow representando a linha da célula selecionada: private void button3_Click(object sender, EventArgs e){ // vamos obter a linha da célula selecionada DataGridViewRow linhaAtual = dataGridView1.CurrentRow; // vamos exibir o índice da linha atual int indice = linhaAtual.Index; MessageBox.Show("O índice da linha atual é: " + indice); } |
VB.NET ::: Dicas & Truques ::: Strings e Caracteres |
Como declarar e inicializar uma string em VB.NET usando o operador NewQuantidade de visualizações: 8521 vezes |
Nesta dica mostrarei como podemos usar o operador New para criar e inicializar um novo objeto da classe String em VB.NET. Veja o código completo para o exemplo: Imports System Module Program Sub Main(args As String()) ' declara uma variável do tipo String Dim frase As String ' inicializa a string usando New frase = New String("Você já conhece o site Arquivo de Códigos?") ' vamos mostrar o resultado Console.WriteLine("A frase é: " & frase) Console.WriteLine(vbCrLf & "Pressione qualquer tecla para sair...") ' pausa o programa Console.ReadKey() End Sub End Module Ao executar este código VB.NET nós teremos o seguinte resultado: A frase é: Você já conhece o site Arquivo de Códigos? |
GoLang ::: Dicas & Truques ::: Strings e Caracteres |
Como retornar o tamanho de uma string em Golang usando os métodos len() e RuneCountInString()Quantidade de visualizações: 932 vezes |
Em algumas situações nós precisamos obter e retornar o tamanho de uma string, ou seja, a quantidade de caracteres em uma palavra, frase ou texto. Para isso nós podemos duas funções na linguagem Go: len() e RuneCountInString(). O método len() retorna a quantidade de bytes contidos em uma string. Note, porém, que esta função não é recomendada quando estamos lidando com caracteres do conjunto utf8, que requerem dois bytes. Dessa forma, se estivermos certos de que a string não possui acentos ou caracteres especiais, então o método len() é o mais adequado. Veja um trecho de código Golang no qual pedimos para o usuário informar uma palavra ou frase e em seguida nós informamos a quantidade de caracteres contidos nela: // pacote principal package main // vamos importar os módulos necessários import ( "bufio" "fmt" "os" "strings" ) // esta é a função principal do programa func main() { // variáveis que vamos usar na resolução do problema var frase string var tamanho int // vamos pedir para o usuário informar uma // palavra ou frase fmt.Print("Informe uma palavra ou frase: ") var entrada = bufio.NewReader(os.Stdin) frase, _ = entrada.ReadString('\n') frase = strings.TrimSpace(frase) // vamos obter o tamanho da string tamanho = len(frase) // e mostramos o resultado fmt.Printf("A palavra ou frase contém %d caracteres", tamanho) } Ao executarmos este código Go nós teremos o seguinte resultado: Informe uma palavra ou frase: Gosto de Python A palavra ou frase contém 15 caracteres Se contarmos a quantidade de caracteres na string informada, realmente veremos que o código retornou o resultado esperado. O problema acontece quando informamos uma palavra ou frase com acentos ou caracteres especiais. Experimente e veja que a função len() começa a retornar uma contagem estranha. Quando nossas strings possuem caracteres especiais ou com acentos, a função a ser usada é RuneCountInString(). Veja: // pacote principal package main // vamos importar os módulos necessários import ( "bufio" "fmt" "os" "unicode/utf8" "strings" ) // esta é a função principal do programa func main() { // variáveis que vamos usar na resolução do problema var frase string var tamanho int // vamos pedir para o usuário informar uma // palavra ou frase fmt.Print("Informe uma palavra ou frase: ") var entrada = bufio.NewReader(os.Stdin) frase, _ = entrada.ReadString('\n') frase = strings.TrimSpace(frase) // vamos obter o tamanho da string tamanho = utf8.RuneCountInString(frase) // e mostramos o resultado fmt.Printf("A palavra ou frase contém %d caracteres", tamanho) } Ao executarmos este novo código nós teremos o resultado: Informe uma palavra ou frase: Código A palavra ou frase contém 6 caracteres |
C++ ::: Desafios e Lista de Exercícios Resolvidos ::: Recursão (Recursividade) |
Exercício Resolvido de C++ - Um método recursivo que conta de 0 até 10Quantidade de visualizações: 956 vezes |
Pergunta/Tarefa: Escreva um método recursivo que conta e exibe os valores de 0 até 10. Seu método deverá possuir a seguinte assinatura: void contar_recursivamente(int n){ // sua implementação aqui } Sua saída deverá ser parecida com: 0 1 2 3 4 5 6 7 8 9 10 Veja a resolução comentada deste exercício usando C++: #include <iostream> #include <cstdlib> using namespace std; // método recursivo que conta de 0 até 10; void contar_recursivamente(int n){ // vamos exibir o número atual cout << n << " "; // devemos prosseguir com a recursividade? if(n < 10){ // incrementa o valor de n n++; contar_recursivamente(n); // e faz uma nova chamada recursiva } } // função principal do programa int main(int argc, char *argv[]){ // efetua uma chamada ao método recursivo fornecendo o primeiro valor contar_recursivamente(0); cout << "\n\n"; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } |
JavaScript ::: Dicas & Truques ::: Strings e Caracteres |
Como converter uma string em um valor de ponto-flutuante em JavaScript usando a função parseFloat()Quantidade de visualizações: 7874 vezes |
Em algumas situações nós precisamos receber uma string informada pelo usuário e convertê-la para um valor real válido. Um valor em JavaScript é o mesmo que um valor com casas decimais, ou seja, um valor de ponto-flutuante. Esta tarefa pode ser realizada com o auxílio da função parseFloat(). Veja uma página HTML completa demonstrando o seu uso: <!doctype html> <html> <head> <title>Strings em JavaScript</title> </head> <body> <script type="text/javascript"> var valor1 = "87.32"; var valor2 = "Arquivo"; var valor3 = "65,54"; // vamos exibir os resultados document.write(parseFloat(valor1) + "<br>"); document.write(parseFloat(valor2) + "<br>"); document.write(parseFloat(valor3)); </script> </body> </html> Ao executarmos este código JavaScript nós teremos o seguinte resultado: 87.32 NaN 65 Note que apenas a primeira string pôde ser convertida para um valor fracionário com sucesso. |
C++ ::: Dicas & Truques ::: Matemática e Estatística |
Como calcular juros simples e montante usando C++Quantidade de visualizações: 19753 vezes |
O regime de juros será simples quando o percentual de juros incidir apenas sobre o valor principal. Sobre os juros gerados a cada período não incidirão novos juros. Valor Principal ou simplesmente principal é o valor inicial emprestado ou aplicado, antes de somarmos os juros. Transformando em fórmula temos: J = P . i . n Onde: J = juros P = principal (capital) i = taxa de juros n = número de períodos Imaginemos uma dívida de R$ 2.000,00 que deverá ser paga com juros de 5% a.m. pelo regime de juros simples e o prazo para o pagamento é de 2 meses. O cálculo em C++ pode ser feito assim: #include <iostream> using namespace std; int main(int argc, char *argv[]) { float principal = 2000.00; float taxa = 0.08; int meses = 2; float juros = principal * taxa * meses; cout << "O total de juros a ser pago é: " << juros << "\n\n"; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } O montante da dívida pode ser obtido das seguintes formas: a) Montante = Principal + Juros b) Montante = Principal + (Principal x Taxa de juros x Número de períodos) M = P . (1 + (i . n)) Veja o código: #include <iostream> using namespace std; int main(int argc, char *argv[]) { float principal = 2000.00; float taxa = 0.08; int meses = 2; float juros = principal * taxa * meses; float montante = principal * (1 + (taxa * meses)); cout << "O total de juros a ser pago é: " << juros << "\n"; cout << "O montante a ser pago é: " << montante << "\n\n"; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } |
Nossas 20 dicas & truques de programação mais populares |
Delphi - Como excluir o item ou itens selecionados em uma TListBox do Delphi usando a função DeleteSelected |
Você também poderá gostar das dicas e truques de programação abaixo |
Nossas 20 dicas & truques de programação mais recentes |
Últimos Projetos e Códigos Fonte Liberados Para Apoiadores do Site |
Python - Como criar o jogo Pedra, Papel, Tesoura em Python - Jogo completo em Python com código comentado |
Últimos Exercícios Resolvidos |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |