segunda-feira, 11 de junho de 2012

Problema com acentuação no JSF

Tente colocar no <head> do seu template:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
fica assim:
<h:head>     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />     <link href="#{facesContext.externalContext.request.contextPath}/resources/css/default.css" rel="stylesheet" type="text/css" />     <link href="#{facesContext.externalContext.request.contextPath}/resources/css/cssLayout.css" rel="stylesheet" type="text/css" />     <title>Sistema INSG</title></h:head>
Se a acentuação continuar com o problema tente colocar no sun-web.xml:
<parameter-encoding default-charset="UTF-8"/>
fica assim:
<sun-web-app error-url="">     <parameter-encoding default-charset="UTF-8"/>     <context-root>/SeuSistema</context-root>    <class-loader delegate="true"/>   <jsp-config>          <property name="keepgenerated" value="true">               <description>Keep a copy of the generated servlet class' java code.</description>          </property>     </jsp-config>  </sun-web-app>

quinta-feira, 31 de maio de 2012

Quebra de linha utilizando h:outputText

Utilize o "<br />" na string para a quebra de linha e no outputText utilize o escape="false".
ex.:

<h:outputText value="#{seuBackBean.suaString}" escape="false"/>

sexta-feira, 25 de maio de 2012

Instalando fontes no ubuntu

1. Entre na pasta fonts usando:

cd /usr/share/fonts/

2. Crie uma pasta relacionada ao tipo de fonte, no meu caso usarei fontes específicas para relatórios do meu sistema, então ficará:
sudo mkdir relatorios

3. Então copie para dentro da pasta as fontes:

sudo cp localdattf/minhafonte.ttf /usr/share/fonts/relatorios

4. Depois uso o fc-cache pra atualizar as fontes do sistema sem precisar reiniciar:

sudo fc-cache -f -v

terça-feira, 22 de maio de 2012

Remover acento de uma String


utilizo o Normalizer e depois o replaceAll pra limpar a string

public String retiraacento(String str) {
        str = Normalizer.normalize(str, Normalizer.Form.NFD);
        str = str.replaceAll("[^\\p{ASCII}]", "");
        return str;
}

*Nota: idéia tirada do site Java free

quarta-feira, 16 de maio de 2012

Converter Calendar por String utilizando uma linha

new java.text.SimpleDateFormat("dd/MM/yyyy").format(SEUCALENDAR.getTime())

*Nota: Troque SEUCALENDAR pela data do seu sistema.

terça-feira, 15 de maio de 2012

Enviar email pelo java utilizando javamail e jsf


1. Faça o download da biblioteca JavaMail no site (aqui).

2. Crie uma classe chamada SendMail e copie os dados da classe abaixo dentro deste arquivo.

-- classe SendMail --
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

//clase que retorna uma autenticacao para ser enviada e verificada pelo servidor smtp
public class SendMail {
    private String mailSMTPServer;
    private String mailSMTPServerPort;
    /*
     * quando instanciar um Objeto ja sera atribuido o servidor SMTP do GMAIL 
     * e a porta usada por ele
     */
    public SendMail() { //Para o GMAIL 
        mailSMTPServer = "smtp.gmail.com";
        mailSMTPServerPort = "465";
    }
    /*
     * caso queira mudar o servidor e a porta, so enviar para o contrutor
     * os valor como string
     */

    public SendMail(String mailSMTPServer, String mailSMTPServerPort) { //Para outro Servidor
        this.mailSMTPServer = mailSMTPServer;
        this.mailSMTPServerPort = mailSMTPServerPort;
    }
    public void sendMail(String from, String to, String subject, String message) {
        Properties props = new Properties();
       // quem estiver utilizando um SERVIDOR PROXY descomente essa parte e atribua as propriedades do SERVIDOR PROXY utilizado
                /*
        props.setProperty("proxySet","true");
        props.setProperty("socksProxyHost","192.168.155.1"); // IP do Servidor Proxy
        props.setProperty("socksProxyPort","1080");  // Porta do servidor Proxy
         */
        props.put("mail.transport.protocol", "smtp"); //define protocolo de envio como SMTP
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", mailSMTPServer); //server SMTP do GMAIL
        props.put("mail.smtp.auth", "true"); //ativa autenticacao
        props.put("mail.smtp.user", from); //usuario ou seja, a conta que esta enviando o email (tem que ser do GMAIL)
        props.put("mail.debug", "true");
        props.put("mail.smtp.port", mailSMTPServerPort); //porta
        props.put("mail.smtp.socketFactory.port", mailSMTPServerPort); //mesma porta para o socket
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.socketFactory.fallback", "false");
        //Cria um autenticador que sera usado a seguir
        SimpleAuth auth = null;
        auth = new SimpleAuth("EMAILQUEENVIARA", "SENHA");
        //Session - objeto que ira realizar a conexão com o servidor
/*Como há necessidade de autenticação é criada uma autenticacao que
         * é responsavel por solicitar e retornar o usuário e senha para 
         * autenticação */
        Session session = Session.getInstance(props, auth);
        session.setDebug(true); //Habilita o LOG das ações executadas durante o envio do email
        //Objeto que contém a mensagem
        Message msg = new MimeMessage(session);
        try {
            //Setando o destinatário
            msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
            //Setando a origem do email
            msg.setFrom(new InternetAddress(from));
            //Setando o assunto
            msg.setSubject(subject);
            //Setando o conteúdo/corpo do email
            msg.setContent(message, "text/plain");

        } catch (Exception e) {
            System.out.println(">> Erro: Completar Mensagem");
            e.printStackTrace();
        }

        //Objeto encarregado de enviar os dados para o email
        Transport tr;
        try {
            tr = session.getTransport("smtp"); //define smtp para transporte
/*
             *  1 - define o servidor smtp
             *  2 - seu nome de usuario do gmail
             *  3 - sua senha do gmail
             */
            tr.connect(mailSMTPServer, "EMAILQUEENVIARA", "SENHA");
            msg.saveChanges(); // don't forget this
            //envio da mensagem
            tr.sendMessage(msg, msg.getAllRecipients());
            tr.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            System.out.println(">> Erro: Envio Mensagem");
            e.printStackTrace();
        }

    }
}
class SimpleAuth extends Authenticator {
    public String username = null;
    public String password = null;
    public SimpleAuth(String user, String pwd) {
        username = user;
        password = pwd;
    }
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(username, password);
    }
}

*Lembrando que os dados do EMAILQUEENVIARA e SENHA será substituido pelos seus dados.
*Também lembrando que está configurado para utilizar o gmail, se deseja utilizar outro email precisará alterar o método:

 public SendMail() { //Para o GMAIL 
        mailSMTPServer = "smtp.gmail.com";
        mailSMTPServerPort = "465";
  }

2. Enviando o email


try {
   new SendMail().sendMail(DEQUEM, PARAQUEM, ASSUNTODOEMAIL, CORPODOEMAIL);
} catch (Exception ex) {
   throw new Exception("Erro no envio do email." + ex.getMessage());
}

*Lembrando que o CORPODOEMAIL pode ser HTML para ajudar na formatação.

segunda-feira, 14 de maio de 2012

Atualização da sequence no postgresql

Execute o comando abaixo pelo pgadmin.


BEGIN;
SELECT setval('nomedasuasequencia1', max(id)+1) FROM nomedatabela1;
SELECT setval('nomedasuasequencia2', max(id)+1) FROM nomedatabela2;
SELECT setval('nomedasuasequencia3', max(id)+1) FROM nomedatabela3;
END;

Formatar data e cpf no h:inputText

1. Primeiro crie um arquivo do tipo JavaScript file na sua IDE, depois copie o texto abaixo nele.

-- texto do javascript que será copiado dentro do arquivo --

function mascaraData(elemento, event){
    /* 8 = backspace; 9 = tab */
    if (event.keyCode == 8 || event.keyCode == 9)
        return true;


    if (elemento.value.length >= 10)
        return false;


    if (elemento.value.length == 2)
    {
        elemento.value +=  '/' ;
        return true;
    }
    else if (elemento.value.length == 5)
    {
        elemento.value += '/';
        return true;
    }
    return true;
}



function mascaraCPF(elemento, event)
{
    if (event.keyCode == 8 || event.keyCode == 9)
        return true;


    if (elemento.value.length >= 12)
        return false;


    else if (elemento.value.length == 9 && event.keyCode != 8)
    {
        elemento.value += '-';
        return true;
    }
    return true;
}


2. Adicione a referencia no seu template.

-- como ficará o <head> do seu site com a referencia do java script --
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="#{facesContext.externalContext.request.contextPath}/css.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="#{facesContext.externalContext.request.contextPath}/NOMEDOSEUJAVASCRIPT.js"/>
<title>titulo do seu site</title>
</head>


* Lembrando que você deve alterar o NOMEDOSEUJAVASCRIPT.js pelo nome do arquivo que você criou.

3. Adicionando o formato no h:inputText.

<h:inputText value="#{backbean.objeto.nascimento}" id="txtDtNascimento" onkeypress="return mascaraData(this, event)" converter="CalendarConverter"/>


<h:inputText value="#{backbean.objeto.cpf}" id="txtcpf" onkeypress="return mascaraCPF(this, event)"/>


Utilizando o CalendarConverter

1.  Crie um arquivo "Java Class" com o nome CalendarConverter na sua IDE, depois copie o texto da classe a baixo no post.
-- classe CalendarConverter que será copiada dentro do arquivo criado --


import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;


public class CalendarConverter implements Converter {


    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        if (value.isEmpty()) {
            return null;
        }
        Calendar cal = Calendar.getInstance();
        try {
            String sDate = value.replaceAll("[a-z,A-Z, ,-, ,/]+", "");
            String day = sDate.substring(0, 2);
            String month = sDate.substring(2, 4);
            String year = sDate.substring(4);
            cal.set(Integer.parseInt(year), Integer.parseInt(month) - 1, Integer.parseInt(day));
        } catch (Exception ex) {
            throw new ConverterException("Data em formato inválido!");
        }
        return cal;
    }


    public String getAsString(FacesContext context, UIComponent component, Object value) {
        String displayDate = "";
        if (value != null) {
            Calendar calendar = (Calendar) value;
            SimpleDateFormat fSDateFormat = new SimpleDateFormat("dd/MM/yyyy");
            displayDate = fSDateFormat.format(calendar.getTime());
        }
        return displayDate;
    }
}


2.  Copie o texto abaixo dentro do seu faces-config.xml para essa classe ser reconhecida como uma converter.
-- texto que será copiado dentro do faces-config.xml --

<converter>
        <description>Converter para conversao de Calendar (apenas data) em String.</description>
        <converter-id>CalendarConverter</converter-id>
        <converter-class>PACKAGE.CalendarConverter</converter-class>
</converter>


* Lembrando de substituir o PACKAGE pelo o nome do package que contém a classe java que você criou.


3.  Adicione converter="CalendarConverter" nos componentes que deseja.
-- componentes jsf utilizando o converter (retire as aspas)--
<h:inputText value="#{backbean.objeto.nascimento}" id="txtDtNascimento" converter="CalendarConverter"/>


<h:outputLabel value="#{backbean.objeto.nascimento}" id="txtDtNascimento" onkeypress="return mascaraData(this, event)" converter="CalendarConverter"/>

Function para remover acento em postgresql


CREATE OR REPLACE FUNCTION sem_acento(text)
  RETURNS text AS
$BODY$
SELECT translate($1,'ÀÁÂÃÄÅĀĂĄÈÉÊËĒĔĖĘĚÌÍÎÏĨĪĮİÒÓÔÕÖØŌŎŐÙÚÛÜŨŪŬŮŰŲ
àáâãäåāăąèéêëēĕėęěìíîïĩīĭįòóôõöøōŏőùúûüũūŭůųÇçÑñÝýÿĆćĈĉĊċČčĎďĐđ
ĜĝĞğĠġĢģĤĥĦħ',

'AAAAAAAAAEEEEEEEEEIIIIIIIIOOOOOOOOOUUUUUUUUUUaaaaaaaaa
eeeeeeeeeiiiiiiiiooooooooouuuuuuuuuCcNnYyyCcCcCcCcDdDd
GgGgGgGgHhHh');
$BODY$
  LANGUAGE sql IMMUTABLE STRICT
  COST 100;
ALTER FUNCTION sem_acento(text)
  OWNER TO postgres;

Criando a variável de ambiente $JAVA_HOME


Primeiro verifique se essa variável já não está definida, abra um terminal e digite o seguinte:

echo $JAVA_HOME

Se aparecer o local correto da última versão do Java instalado, pare por aqui e está tudo OK! Caso contrário, se nada aparecer faça o seguinte no terminal:

sudo cp /etc/bash.bashrc /etc/bash.bashrc_backup
sudo gedit /etc/bash.bashrc

Adicione o seguinte no final do arquivo:

JAVA_HOME=/opt/jdk1.6.0/bin/java 
export JAVA_HOME

Lembrando de trocar "/opt/jdk1.6.0/bin/java" pelo local correto da sua instalação. No próximo login, lembre-se de verificar se ela está definida corretamente:

echo $JAVA_HOME

Caso o JAVA_HOME esteja sendo definido de forma errada, você precisará encontrar onde é que ele está sendo definido para fazer a mudança. Comece procurando pelo arquivo de /etc/bash.bashrc e continue nos demais arquivos de inicialização do Linux.