jueves, 18 de junio de 2009
martes, 5 de mayo de 2009
Subir un archivo en Struts
Este tutorial (?) es para aprender (?) a subir archivos correctamente (puro trial and error hasta que me salió) usando el framework Struts 1, asi que si no sabes Struts no sigas leyendo, gracias.
El JSP
Aquí es donde va estar el campo para subir el archivo. Supongamos que ya tenemos el esqueleto del jsp bien configurado y lo que nos falta es lo que vemos en la foto.
En el jsp vamos a tener que poner una cosa asi (en negrita lo importante):
<table align="center">
<tr>
<td align="left">
Fichier a charger <font color="#FF0000"> *</font>
</td>
<td valign="top">
<html:file name="massGroupReplacementFileForm" property="replacementFile" style="width:80%;"/>
</td>
</tr>
</table>
Esta tabla va a estar adentro de un form obviamente (el formato es <html:form><table>blabla</table></html:form>) y para que el form tome bien el archivo que subimos tiene que quedar asi:
<html:form enctype="multipart/form-data" action="/admin/massGroupReplacement/fileSave.do">
Ese enctype=blabla es lo que me tuvo a maltraer un buen rato.
El struts-config.xml
Pongo el codigo nomás, it's pretty straightforward (!)
<action path="/admin/massGroupReplacement/fileSave"
name="massGroupReplacementFileForm"
validate="false"
scope="request"
type="com.blabla.admin.struts.MassGroupReplacementFileSaveAction">
<forward name="OK" path="/admin/menu.do" />
<forward name="ERROR" path=
"/jsp/administration/massGroupReplacementFileUpload.jsp" />
</action>
El ActionForm
Pongo el codigo directamente porque también es simple, no hay mucho para decir, solo que el tipo de dato correspondiente al campo del archivo es un FormFile, no un File comun y corriente.
import org.apache.struts.upload.FormFile;
public class MassGroupReplacementFileForm {
private FormFile replacementFile;
public FormFile getReplacementFile() {
return replacementFile;
}
public void setReplacementFile(FormFile replacementFile) {
this.replacementFile = replacementFile;
}
}
El Action
Obviamente uno con ese archivo subido puede hacer lo que carajo quiera, pero que se yo, lo recomendable es copiarlo a una carpeta del servidor para luego hacerle algo.
Entonces obtenemos el FormFile subido y lo metemos en nuestro File, de la siguiente manera:
MassGroupReplacementFileForm rf = (MassGroupReplacementFileForm) form;
FormFile replacementFile = rf.getReplacementFile();
File f = new File("c:\\directorio\\subdirectorio\\pepito.dat");
OutputStream out = new FileOutputStream(f);
out.write(replacementFile.getFileData());
out.flush();
out.close();
En un futuro próximo veremos como carambas se hace esto en Struts 2. Chau.
/*
Deinos
*/
15:19
4
comentario(s)
Tags -> programación
viernes, 24 de abril de 2009
martes, 21 de abril de 2009
miércoles, 15 de abril de 2009
/*
Deinos
*/
14:05
2
comentario(s)
miércoles, 18 de marzo de 2009
Philips SBC HL150
/*
Deinos
*/
11:24
3
comentario(s)
martes, 24 de febrero de 2009
Validame essssta... fecha
A lo largo de nuestras vidas como programadores (ay el, jose_programador) siempre nos cruzamos con el problema de validar fechas ingresadas por el usuario.
Sabemos que el usuario es un pelotudo capaz de ponerte 30 de febrero como fecha de nacimiento y uno tiene que evitar eso, tiene que estar un paso adelante de ese tarado, porque este tipo de detalles pueden hacer que una aplicación re grosa deje una mala impresión.
Afortunadamente, lenguajes como Java traen clases que hacen hacen esto automáticamente.
A mi me cabe (?) la clase SimpleDateFormat y mi manera de usarla es la siguiente.
Creo un objeto de esta clase usando el constructor que recibe por parámetro el formato de la fecha (lo que se llama "pattern").
El pattern lo defino yo y más adelante comentaré sobre el mismo.
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Este objeto sdf va a ser usado para convertir el String recibido (el que ingresó el usuario a traves de un formulario o un campo en una ventana) en un objeto Date.
Antes de llamar al metodo que hace la conversión, hay que setear el lenient de este objeto (sdf) en falso, esto es para que a la hora de comprobar el pattern sea estricto.
sdf.setLenient(false);
Aca se hace la conversión de String a Date
// cadenaFecha es el String ingresado por el usuario
Date fecha = sdf.parse(cadenaFecha);
Si al hacer esa conversion, salta una exception, significa que la fecha estuvo mal ingresada, ya sea porque el usuario no respetó el formato definido por nosotros o porque metió una fecha inexistente.
Por eso es que se tiene que meter en un bloque try-catch, para hacer algo en
que caso que la fecha no funque, así no se rompe todo
try {
// cadenaFecha es el String ingresado por el usuario
Date fecha = sdf.parse(cadenaFecha);
} catch (ParseException e) {
throw e;
/* Podria haber puesto cualquiera de las siguientes:
e.printStackTrace();
o
actionErrors.add("date", new ActionMessage("errors.date"));
return actionErrors;
o
lo q se me cante hacer con esta exception
*/
}
O sea, para poder validar el ingreso del 1 de enero de 2009, el usuario tiene que haberla ingresado como "01/01/2009".
Pero lo bueno es que ese "pattern" (formato) que puse al principio es no restrictivo y se puede cambiar a conveniencia.
Si quisiera que pase ingresando 1/1/09 hubiera elegido como pattern "d/M/yy"
Si quisiera que pase con 1-1-09 hubiera elegido "d-M-yy"
Si quisiera que pase con 01012009 hubiera elegido "ddMMyyyy"
Aquí hay un cuadro indicando los caracteres que se pueden usar y lo que cada uno representa a la hora de definir nuestro pattern.
Entonces, basicamente para pasar una fecha de String a Date y en el medio validar, tengo que hacer:
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
try {
// cadenaFecha es el String ingresado por el usuario
Date fecha = sdf.parse(cadenaFecha);
} catch (ParseException e) {
e.printStackTrace();
throw e;
}
La magia (?) de la clase SimpleDateFormat no termina aquí. Oh no, no no! (?)
También sirve para hacer la inversa, pasar un fecha que tengamos (de tipo Date) a un String en el formato que queramos.
Esto se hace con el metodo format y una manera simplisima de probar esto es asi:
Date miDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("dd MM yyyy - HH:mm:ss");
String cad = sdf.format(miDate);
System.out.println(cad);
Este código nos va a imprimir la fecha y hora actual en pantalla.
Ej: 24 02 2009 - 14:48:33
Bárbaro, pero y si no tenés la suerte de contar con una ayuda así?
Bueno, pues aquí tenemos un código en C adaptable a cualquier lenguaje que hace tooooodo lo que dije al principio.
Fue robado de aquí y adaptado al castellano (menos los comments) por un servidor.
int es_anio_bisiesto (int);
int fecha_valida(int dia, int mes, int anio)
{
int valida=1;
int mes_long[13] ={ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };if (es_anio_bisiesto(anio))
mes_long[2] = 29;if ( mes < 1 mes > 12 )
valida = 0;
else if ( dia < 1 dia > mes_long[mes] )
valida = 0;return valida;
}int es_anio_bisiesto(int anio)
{int result;
if ( (anio%4) != 0 ) // or: if ( year%4 )
result = 0; // means: if year is not divisible by 4
else
if ( (anio%400) == 0 ) // or: if ( !(year%400) )
result = 1; // means: if year is divisible by 400
else
if ( (anio%100) == 0 ) // or: if ( !(year%100) )
result = 0; // means: if year is divisible by 100
else // (but not by 400, since that case
result = 1; // considered already)return result;
}
/*
Deinos
*/
14:48
4
comentario(s)
Tags -> programación
sábado, 14 de febrero de 2009
/*
Deinos
*/
03:00
2
comentario(s)
martes, 3 de febrero de 2009
/*
Deinos
*/
18:33
1 comentario(s)
Tags -> noticias
martes, 13 de enero de 2009
martes, 9 de diciembre de 2008
lunes, 1 de diciembre de 2008
domingo, 23 de noviembre de 2008
Dora, la tortuga exploradora
De repente, así de la nada, apareció esto en mi jardínLa tortuga es un animal fantástico. Encima esta era una masa, caminaba rapidísimo, tenía zarpadas uñas, mordía cascotes, seguía a la gata que mantenía distancia por respeto (?) y no se amedentraba ante los perros que no le sacaban la nariz de encima.
Enseguida se la dimos a una vecina con pinta de que le caben las tortugas (?), pero siempre estarás en mi corazón Dora, sabelo!
/*
Deinos
*/
21:18
2
comentario(s)
viernes, 24 de octubre de 2008
¿Será posible que justo cuando me estoy por ir de la empresa descubro donde se hacen los mejores sambuches de la zona?
La diferencia entre uno de $6 y uno de $4 es NOTABLE
/*
Deinos
*/
13:34
1 comentario(s)
miércoles, 22 de octubre de 2008
Parciales todos los días
Grandioso (Y)
/*
Deinos
*/
17:20
1 comentario(s)
Tags -> estudios
martes, 21 de octubre de 2008
Que fresquete
Faltan 8 meses para el invierno y yo ya se que quiero de regalo:
/*
Deinos
*/
16:56
1 comentario(s)
domingo, 19 de octubre de 2008
viernes, 17 de octubre de 2008
El sueño de mi vida es que alguien le ponga mi nombre a su perro. No a su hijo, a su perro.
Onda, "a este tierno can le puse Gabriel porque me hizo acordar (o en homenaje) a vos".
Y yo re feliz.
Posta.
/*
Deinos
*/
20:42
0
comentario(s)
jueves, 16 de octubre de 2008
jueves, 2 de octubre de 2008
El horario de oficina tendria que empezar a las 10.
Asi llego temprano.
Mentira, caería media hora tarde igual.
/*
Deinos
*/
10:58
1 comentario(s)









