sexta-feira, 28 de setembro de 2007

Abrir paginas com Ajax

Navegação em uma pagina JSF, onde um componente ira receber dentro dele a pagina de se deseja abrir:


<af:commandLink actionListener="#{backing.funcao}"
styleClass="textoSubMenu"
id="LinkTeste"
partialSubmit="true"
onclick= "javascript:setaValor('../site/paginaTeste.jspx',
'descricao');">
<h:outputText value="#{msg.subMenuControladoria}"/>
</af:commandLink>


Nesse link(Componente do ADF), foi utilizado um actionListener para realizar umas funções na pagina, e a propriedade partialSubmit="true" , para evitar que toda a pagina fosse atualizada ao clicar (O funcionamento disso esta em um outro post).

Quando a ação de clique é disparada, então o javascript a seguir entra em ação para buscar a nova pagina e carrega-la dentro de um componente já definido.


function getXmlHttpRequestObject() {
if (window.XMLHttpRequest) {
return new XMLHttpRequest(); //Not IE
} else if (window.ActiveXObject) {
return new ActiveXObject("Microsoft.XMLHTTP"); //IE
} else {
alert("Seu navegador não suporta essa navegação. Por favor Atualize!");
}
}
var receiveReq = getXmlHttpRequestObject();
var idcomp;
//Initiate the asyncronous request.

function setaValor(pagina , id ) {
//Deixa visivel a imagem e esconde o componente até ser carregado
document.getElementById(id).style.visibility = "hidden";
document.getElementById("loading").style.visibility = "visible";
if (receiveReq.readyState == 4 || receiveReq.readyState == 0) {
receiveReq.open("GET", pagina, true);
idcomp = id;
receiveReq.onreadystatechange = setar;
receiveReq.send(null);
}
}

function setar() {
if (receiveReq.readyState == 4) {
//esconde a imagem
document.getElementById("loading").style.visibility = "hidden";
//Joga a pagina requisitada para dentro do componente
document.getElementById(idcomp).innerHTML =
receiveReq.responseText;
//Deixa visivel o componente carregado
document.getElementById(idcomp).style.visibility = "visible";
}
}


Esse javascript ainda altera a propriedade visibility de um componente de id = loading:


<h:graphicImage url="/Imagens/loading.gif" id="loading" styleClass="figLoading"/>


Esse componente é apenas uma imagem do tipo gif, que usei para dar uma resposta ao usuário enquanto a pagina é carregada.(implementação bem simples).

Depois de carregado e mostrado pelo JavaScript, este é o componente que recebe a pagina que foi carregada:


<h:form styleClass="formDescSMenu" id="descricao"></h:form>

Grupo de JSF oficial do Brasil!

Um grupo internacional da língua portuguesa para discussão de conceitos e tecnologias Web como JavaServer Faces, RIA, patterns e ferramentas de desenvolvimento.

Grupo de JSF

segunda-feira, 10 de setembro de 2007

PartialRefresh e Partialtriggers para componentes ADF

Para que serve?
Atualizar componentes sem que seja preciso atualizar a pagina.

PartialRefresh
Atualizar um componente setando novas configurações ou opções a ele, dizendo apenas qual o componente a ser atualizado
/**
* Faz com que o componente passado por parâmentro seja
* atualizado na tela
* @param uic componente a ser atualizado
*/
private void doPartialRefresh(UIComponent uic) {
AdfFacesContext adfctx = AdfFacesContext.getCurrentInstance();
adfctx.addPartialTarget(uic);
}

Partialtriggers
Define que um componente será reatualizado quando algum outro por alterado

af:selectonechoice label="Teste"
required="true"
binding="#{backing_teste.oneChoice}"
partialtriggers="IdComponente"
id="selectOneChoice"
/af:selectonechoice


OBS: para que essa atualização ocorra normalmente o componente que ira disparar as alteraçoes deve estar com a propriedade autoSubmit ou partialSubmit setado para true

quarta-feira, 29 de agosto de 2007

terça-feira, 21 de agosto de 2007

Mascara JavaScript

Existem tantas mascaras prontas por ae, e cada uma com suas particularidades, mas nenhuma atendia as minhas necessidades e então decidi criar uma que serviria para data, cpf ou outras mascaras que fosse preciso.

Embora bem extensa, é bem simples, e embora eu não seja muito bom em JavaScript, ficou bem útil e fácil de entender e modificar, caso necessário.


function aplicaMascara(campo,event, mascara) {
if (event.keyCode >= 46||event.keyCode == 8){
position = campo.selectionStart;
valor = campo.value;
v = event.keyCode;
m = mascara.charAt(position);
c = campo.value.charAt(position);
//Verifica se a mascara é para numero e se o valor inserido tb é
if (((m == '9')||(m == '0'))&&((event.keyCode >= 48 && event.keyCode <= 57)
||(event.keyCode >= 96 && event.keyCode <= 105))) {
if (c != '') {
valor = atualizaValor(valor,position,'');
document.getElementById(campo.id).value = valor;
setCursorPosition(campo,position,position);
}
//Verifica se a mascara é para texto e se o valor inserido tb é
} else if ((m == '#')&&(event.keyCode >= 65 && event.keyCode <= 90)) {
if (c != '') {
valor = atualizaValor(valor,position,'');
document.getElementById(campo.id).value = valor;
setCursorPosition(campo,position,position);
}
} else {
if (m=='') {
return false;
//Trata o valor caso o usuario pressione DEL, para nao sair da estrutura
} else if (event.keyCode == 46) {
for (del = position ;del < campo.selectionEnd ; del ++) {
valor = atualizaValor(valor,del,' ')
}
document.getElementById(campo.id).value = valor;
setCursorPosition(campo,position,position);
return false;
//Trata o valor caso o usuario pressione Backspace, para nao sair da
// estrutura
} else if(event.keyCode == 8){
valor = atualizaValor(valor,position-1,' ');
document.getElementById(campo.id).value = valor;
setCursorPosition(campo,position-1,position-1);
return false;
} else if ((m != '0')&&(m != '9')&&(m != '#')) {
//insere o saparador ou digito especial no texto
valor = atualizaValor(valor,position,m);
//verifica se o proximo campo da mascara atende as caracteristicas
// do valor inserido
if (((mascara.charAt(position+1) == '9')
||(mascara.charAt(position+1) == '0'))
&&((event.keyCode >= 48 && event.keyCode <= 57)
||(event.keyCode >= 96 && event.keyCode <= 105))) {
if (c != '') {
valor = atualizaValor(valor,position+1,'');
document.getElementById(campo.id).value = valor;
setCursorPosition(campo,position+1,position+1);
}
} else if ((mascara.charAt(position+1) == '#')
&&(event.keyCode >= 65 && event.keyCode <= 90)) {
if (c != '') {
valor = atualizaValor(valor,position+1,'');
document.getElementById(campo.id).value = valor;
setCursorPosition(campo,position+1,position+1);
}
} else {
return false;
}
} else {
return false;
}
}
document.getElementById(campo.id).value = valor;
}
}

//Recebe um texto e substitui o valor passado na posicao indicada
function atualizaValor(texto,posicao,valor){
var novoTexto = "";
for (i = 0; i <= texto.length; i++) {
if (i == posicao) {
novoTexto = novoTexto + valor;
} else {
v = texto.charAt(i);
novoTexto = novoTexto + v;
}
}
return novoTexto;
}

//Seta o cursor para a posicao desejada no campo
function setCursorPosition(oInput,oStart,oEnd) {
if( oInput.setSelectionRange ) {
oInput.setSelectionRange(oStart,oEnd);
} else if( oInput.createTextRange ) {
var range = oInput.createTextRange();
range.collapse(true);
range.moveEnd('character',oEnd);
range.moveStart('character',oStart);
range.select();
}
}



Para utilizar a mascara, basta chama-la desta forma:
onkeydown="return aplicaMascara(this,event,'99/99/9999 99:99');"

Caso seja passado "9" ou "0", ela vai aceitar apenas numeros e se for "#" aceitara apenas letras.

segunda-feira, 30 de julho de 2007

Skin de componentes ADF

Para utilizar um skin diferente do tradicional para os componentes ADF, basta incluir no projeto alguns arquivos referente ao novo Skin (css, imagens), e configurar para que a aplicação os utilize.

Com o JDeveloper, na opção de updates é facil encontrar o item para skins adicionais e basta baixa-los para que eles fiquem na pasta da IDE, e seja possivel utilizar.

Ja com os novos Skin na maquina, resta apenas copiar esses arquivos para uma pasta do seu projeto, e mapea-los para que a aplicação os encontre.

Dentro dessa pasta, pode-se criar pastas para cada Skin que decidir utilizar, e dentro da pasta do Skin, ficara o arquivo de css e as imagens que ele utiliza.
Lembrando que as tags de css devem seguir um padrão de nome ja definido, então para alteraçoes nas cores e outras propriedades é de grande importancia prestar atenção a esses nomes para que funcionem corretamente.

Nesse link pode ser obtido um skin padrao: Oracle Skin

Depois de colocado os arquivos na pasta, é preciso mapea-lo para que seja encontrado pelo projeto, e para isso é necessario um arquivo xml chamado: adf-faces-skins.xml , e que ficara na pasta WEB-INF do projeto, e nele é definido a estrutura do skin dessa forma:



<?xml version="1.0" encoding="ISO-8859-1"?>

<skins xmlns="http://xmlns.oracle.com/adf/view/faces/skin">
<skin>
<id>silver.desktop</id>
<family>silver</family>
<render-kit-id>oracle.adf.desktop</render-kit-id>
<style-sheet-name>skins/silver/silver.css</style-sheet-name>
</skin>

</skins>



Essa estrutura faz com que o skin seja encontrado pelo projeto, e para utiliza-lo, é preciso apenas inserir o seu nome em outro arquivo xml que provavelmente ja estara na pasta web inf : adf-faces-config.xml

<?xml version="1.0" encoding="windows-1252"?>
<adf-faces-config xmlns="http://xmlns.oracle.com/adf/view/faces/config">

<skin-family>silver</skin-family>

</adf-faces-config>

E com isso a aplicação ja estara com um novo visual, e sendo possivel deixar essa opção selecionavel pelo usuario.

Podem ser encontradas maiores explicaçoes em: Oracle ADF

sexta-feira, 29 de junho de 2007

Além do Cidadão Kane

Além do Cidadão Kane é um documentário produzido pela BBC de Londres - proibido no Brasil desde a estréia, em 1993, por decisão judicial - que trata das relações sombrias entre a Rede Globo de Televisão, na pessoa de Roberto Marinho, com o cenário político brasileiro.

- Os cortes e manipulações efetuados na edição do último debate entre Luiz Inácio da Silva e Fernando Collor de Mello, que influenciaram a eleição de 1989.

- Apoio a ditadura militar e censura a artistas, como Chico Buarque que por anos foi proibido de ter seu nome divulgado na emissora.

- Criação de mitos culturalmente questionáveis, veiculação de notícias frívolas e alienação humana.

- Depoimentos de Leonel Brizola, Chico Buarque, Washington Olivetto, entre outros jornalistas, historiadores e estudiosos da sociedade brasileira.



"Todo brasileiro deveria ver Além do Cidadão Kane"

quinta-feira, 21 de junho de 2007

Google maps

Simplesmente demais isso... quem sabe um dia tenha essas opçoes para cidades brasileiras... he he

quarta-feira, 20 de junho de 2007

Valores de Sessao com DWR

Buscando valores de objetos na sessão, via dwr, e jogando valores em um campo na tela diretamente do java:



import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory;
import org.directwebremoting.proxy.dwr.Util;

/**
* pega o WebContex - classe do DWR
* objeto faz a ligacao com o servlet
*
* @return objeto WebContext
*/
private WebContext getWebContext() {
return WebContextFactory.get();
}

/**
* Pega o objeto usuário que está na sessão ativa
*
* @return Usuário
*/
private OBJETO getOBJETO() {
return (OBJETO) this.getWebContext().getSession().getAttribute("OBJETO");
}

/**
* pega o objeto Útil - classe do DWR que permite
* operacoes com os elementos HTML
*
* @return objeto Util
*/
private Util getUtilThis() {
return new Util(getWebContext().getScriptSession());
}

//Aqui passa um valor e um campo da tela e via dwr
// ele seta o valor para o campo na tela
private void setarValor(String valor,String nomeCampo){
this.getUtilThis().setValue(nomeCampo, String.valueOf(valor));
}



E para que tudo isso funcione basta estar configurado corretamente o DWR, e para isso é só dar uma olhada no outro post sobre o assunto.

Acesso a banco Oracle, Firebird, SQL Server via Java

Um codigo simples e rapido para conectar em 3 bancos de dados:
Oracle, Firebird, SQL Server

Estou usando os seguintes drivers
Oracle: ojdbc14.jar
SQL Server: jtds-1.2.jar
Firebird: jaybird-full-2.0.1.jar

Todos esses podem ser facilmente encontrados em uma procura rapida no google (ou generico)



import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class OracleRM {
public OracleRM() {
}

private static final String url =
//Oracle:
// "jdbc:oracle:thin:@ENDERECO_DO_SEU_SERVIDOR:PORTA:BASE_DE_DADOS";
//SQL Server 1433 é a porta padrao
// "jdbc:jtds:sqlserver://
ENDERECO_DO_SEU_SERVIDOR:1433/BASE_DE_DADOS";
//Firebird:
// "jdbc:firebirdsql://ENDERECO_DO_SEU_SERVIDOR/CAMINHO_BASE_DE_DADOS";

private static final String driver =
//Oracle:
// "oracle.jdbc.driver.OracleDriver";
//SQL Server
// "net.sourceforge.jtds.jdbc.Driver";
//Firebird:
// "org.firebirdsql.jdbc.FBDriver";

private static final String usuario = "usuario";
private static final String senha = "senha";

public Connection getConnection() throws SQLException {
try {
Class.forName(driver);
return DriverManager.getConnection(url, usuario, senha);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

}