lunes, 26 de octubre de 2009

bueno haciendo algo de scripting de paginado, me di cuenta de que habia una forma de hacer que conserve todos los parametros y agregar solo los de numero de pagina para poder conservar una busqueda, este es el script generado, como pueden ver es muy sencillo


#macro( paginado )
#if($totalPages)
#if( $totalPages > 0 )
#foreach ($page in [1..$totalPages])
<a href="$link.addIgnore('pageNum').addAllParameters().addQueryData('pageNum',$page)"
>
$page
</a>
#end
#end
#end
#end

lunes, 5 de octubre de 2009

conectando midlets por recordstore

ultimamente he vuelto a trabajar j2me para desarrollar aplicaciones para moviles, esta vez voy a intentar algo que es en cierta forma algo no muy estandar, me refiero a hacer que 2 midlets se comuniquen entre si, para eso requerimos como paso inicial 2 midlets, recordstores, el primer paso es crear un midlet con la siguiente estructura para poder iniciar, este es el midlet de escucha, este podria ser un miniservidor, para eso el midlet requiere como codigo inicial:

protected void startApp() throws MIDletStateChangeException {
try {
//abrimos un recordstore con permisos de escritura de cualquier otro midlet
RecordStore rms = RecordStore.openRecordStore("owner", true, RecordStore.AUTHMODE_ANY ,true );
//agregamos un record listener generado por nosotros
rms.addRecordListener( new ListenerRMS() );
Display d = Display.getDisplay(this);
d.setCurrent(null);
} catch (RecordStoreFullException e) {
e.printStackTrace();
} catch (RecordStoreNotFoundException e) {
e.printStackTrace();
} catch (RecordStoreException e) {
e.printStackTrace();
}


}

este requiere una clase que implemente el codigo del recordlistener esto podria ser algo como esto:


public class ListenerRMS implements RecordListener {

public void recordAdded(RecordStore recordStore, int recordId) {
try {
byte[] data = recordStore.getRecord(recordId);
String rmsToCreate = new String( data );
System.out.println( "datos: " + rmsToCreate );
} catch (RecordStoreNotOpenException e) {
System.err.println( e.toString() );
} catch (InvalidRecordIDException e) {
System.err.println( e.toString() );
} catch (RecordStoreException e) {
System.err.println( e.toString() );
}
}

este codigo permite generar un pequeño server con listener como un rms

y este codigo del lado del otro midlet permite escribir en un recordstore compartido, con el vendor especificado, de manera que cuando agregues valores al record, el listener del otro midlet podra leer los datos generados desde otro midlet y ejecutar codigo

rms = RecordStore.openRecordStore("owner", "vendor","owner" );
byte[] data = "texto de prueba".getBytes();
rms.addRecord(data, 0, data.length);

para esto tienes primero que correr el midlet 1 y despues el midlet 2 y ejecutar un codigo que escriba en el otro recordstore. bueno esto aumenta el numero de posibilidades a la hora de conectar 2 midlets, sin embargo no todos los telefonos soportan esta caracteristica.