Mostrando postagens com marcador exemplo. Mostrar todas as postagens
Mostrando postagens com marcador exemplo. Mostrar todas as postagens

sábado, novembro 29, 2008

Como evitar o submit de um Form com a tecla Enter?

Cena comum na web: usuário está preenchendo um campo input do tipo texto, e o usuário aperta enter - provavelmente esperando mudar de campo, acaba enviando o formulário.

Caso a aplicação seja bem feita uma validação ocorrerá e nenhum dado preenchido será perdido, apenas mostrando uma mensagem de erro na tela. Infelizmente, esse não é o caso na maior parte dos sites por aí... geralmente ou o formulário é submetido incompleto mesmo ou a tela sofre um reload e todos os campos se apagam.

Felizmente, evitar a ação da tecla <enter> em um campo é extremamente simples, bastando criá-lo com o seguinte código:


<input type="text" width="50px" name="name" id="id"
onKeyPress="return !(event.keyCode==13);" />


Definindo a ação onKeyPress do campo, a cada tecla digitada será verificado por javascript se a tecla foi a (keyCode = 13) - caso seja será retornado false, evitando a ação da tecla.

quinta-feira, novembro 27, 2008

Arquivo de build ANT genérico

Segue um arquivo ANT para build automatizado que fiz para um trabalho na faculdade. Serve para projetos simples, onde o código fonte fica na pasta /src, as libs em /lib. Será criado um .zip com os arquivos .jar do programa, das libs, e do código fonte na pasta do projeto. Arquivos criados temporariamente são apagados.
Basta criar um arquivo build.xml na raiz do projeto, e definir algumas variáveis no arquivo antes de executar.

Observação: apesar de uma parte do código não aparecer por causa do layout, basta selecionar tudo que a cópia sairá correta.


<?xml version="1.0" encoding="iso-8859-1" ?>
<project name="build" default="zip" basedir=".">

<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!-- nome do programa -->
<property name="app.name" value="scheduler" />
<!-- classe principal do programa -->

<property name="main.class" value="br.ufsc.ine5616.scheduler.MainScheduler" />
<!-- classpath: definir todas as libs, pois o JRE não aceita wildcards -->
<property name="classpath" value="lib/forms-1.2.1.jar lib/looks-2.2.1.jar" />

<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->



<!-- diretorio de fontes -->
<property name="src" value="${basedir}/src" />
<!-- diretorio de libs -->

<property name="lib" value="${basedir}/lib" />

<!-- diretorios temporarios -->
<property name="build" value="${basedir}/classes" />

<property name="jar" value="${basedir}/jar" />
<property name="dist" value="${basedir}/dist" />


<tstamp>
<format property="timestamp" pattern="dd-MMM-yyyy HH:mm:ss" />
</tstamp>

<target name="create" description="Creates output folders">

<echo>[${app.name}] Create</echo>
<mkdir dir="${build}" />
<mkdir dir="${jar}" />

<mkdir dir="${dist}" />
</target>

<target name="compile" depends="create" description="Compiles the source">

<echo>[${app.name}] Compile</echo>
<javac srcdir="${src}" destdir="${build}" >
<classpath>

<fileset dir="${lib}">
<include name="**/*.jar" />
</fileset>
</classpath>
</javac>

</target>

<target name="jar" depends="compile" description="Creates the jar">
<echo>[${app.name}] Jar</echo>

<jar destfile="${jar}/${app.name}.jar" basedir="${build}">
<manifest>
<attribute name="Implementation-Title" value="${app.name}"/>

<attribute name="Main-Class" value="${main.class}"/>
<attribute name="Sealed" value="true"/>
<attribute name="Class-Path" value="${classpath}"/>

<attribute name="Created-On" value="${timestamp}"/>
<attribute name="Created-By" value="${user.name}"/>
</manifest>

</jar>
</target>

<target name="deploy" depends="jar" description="Deploys projects and /lib to /dist">
<echo>[${app.name}] deploy</echo>

<copy todir="${dist}/${app.name}" overwrite="yes">
<fileset dir="${jar}" includes="${app.name}.jar"/>

</copy>
<copy todir="${dist}/${app.name}/lib" overwrite="yes">
<fileset dir="${basedir}/lib" includes="*.jar" />

</copy>
</target>

<target name="deploy-src" description="Deploys the source files to a .jar file">
<echo>[${app.name}] deploy - src</echo>

<jar destfile="${jar}/${app.name}-src.jar" basedir="${src}">
<manifest>
<attribute name="Implementation-Title" value="${app.name}"/>

<attribute name="Created-On" value="${timestamp}"/>
<attribute name="Created-By" value="${user.name}"/>
</manifest>

</jar>
<copy todir="${dist}/${app.name}" overwrite="yes">
<fileset dir="${jar}" includes="${app.name}-src.jar"/>

</copy>
</target>

<target name="zip" depends="deploy, deploy-src" description="Creates a .zip with the app">
<echo>[${app.name}] Zip</echo>

<delete file="${app.name}.zip" />
<zip destfile="${app.name}.zip" basedir="${dist}" update="true" />

<ant antfile="${basedir}/build.xml" target="clean" />
</target>

<target name="clean" description="Cleans the output directories">

<echo>[${app.name}] Clean</echo>
<delete dir="${build}" />
<delete dir="${jar}" />

<delete dir="${dist}" />
</target>

</project>

terça-feira, julho 29, 2008

Como criar tabelas com chaves compostas via SQL

Este exemplo foi testado no HSQLDB, vindo direto do projeto free2share:

A tabela principal...:
CREATE TABLE Transfer (
idTransfer INTEGER IDENTITY,
serverID INTEGER,
serverURL VARCHAR,
transferSize INTEGER NOT NULL,
hits_last_hour INTEGER,
hits_total INTEGER,
register_time TIMESTAMP
);

A primeira tabela dependente da principal:
CREATE TABLE TransferBlock (
idTransfer INTEGER NOT NULL,
idTransferBlock INTEGER IDENTITY,
serverBlockId INTEGER,
pointer INTEGER NOT NULL,
datasize INTEGER NOT NULL,
dataoffset INTEGER NOT NULL,
hash INTEGER,
version INTEGER NOT NULL,
FOREIGN KEY (idTransfer) REFERENCES Transfer,
UNIQUE (
idTransfer,
idTransferBlock
)
);

E a terceira tabela, dependente das duas primeiras:

CREATE TABLE TransferBlockLink (
idTransfer INTEGER NOT NULL,
idTransferBlock INTEGER NOT NULL,
idLink INTEGER IDENTITY,
url VARCHAR(255) NOT NULL,
downloaded BOOLEAN NOT NULL,
damaged INTEGER NOT NULL,
FOREIGN KEY (idTransfer) REFERENCES Transfer,
FOREIGN KEY (idTransferBlock) REFERENCES TransferBlock,
UNIQUE (
idTransfer,
idTransferBlock,
idLink
)
);
O resultado deverá ser algo parecido com o do diagrama:

quinta-feira, abril 17, 2008

Componente: Board


Componente que implementa um tabuleiro simples, com algum suporte à jogadas. Foi utilizado no Jogo da Memória, feito para a disciplina INE5612.

Pode ser rodado como um JavaBean (por exemplo, inserido na tab Beans do NetBeans) ou inserido no código à mão - a classe tests.DemoBoard exemplifica o processo.

Update: v1.1, corrigindo a visibilidade do construtor Position e adicionando métodos para suporte de Posições Próximas.

Link para download (11KB)

terça-feira, janeiro 15, 2008

Download do conteúdo de uma URL em Java

Estava com problemas pra baixar o conteúdo de uma java.net.URL (uma imagem, no caso) sem corromper os dados. Bem, o código a seguir funcionou que é uma maravilha:

URL downloadLink = new URL("http://xxxxxx.jpg");

FileOutputStream output = new FileOutputStream("arquivo.jpg");
BufferedInputStream input = new BufferedInputStream(downloadLink.openStream());

byte[] buf = new byte[4096];
int lenght;
while ((lenght = input.read(buf)) > 0){
output.write(buf, 0, lenght);
}
input.close();
output.close();


Só faltou, claro, o tratamento das exceções :)