Para escapar el carácter & (ampersand) en SQL, bastará con anteponer y postponer '||'. Esto es de utilidad cuando se quiere almacenar código HTML en base de datos. Ejemplo:
UPDATE TAB_DIV SET CODIGO_HTML = '<span>Mar'||'&'||'iacute;a L'||'&'||'oacute;pez</span>' WHERE ID = 2
Si se quiere escapar el carácter ' (single quote), bastará con poder dos veces el carácter ' (no confundir con el carácter " (double quote)). Ejemplo:
UPDATE TAB_DIV SET CODIGO_HTML = '<span id=''idNombre''>Miguel Rube</span>' WHERE ID = 2
Developer utils
jueves, 3 de noviembre de 2011
sábado, 30 de octubre de 2010
REDIRIGIR A OTRO CONTROLLER (Spring Portlet)
Si al terminar la fase "action" de un portlet, no queremos pasar por la fase "render" asociada, sino que queremos redirigir a la fase "action" de otro Controller, la solución sería ésta:
protected void onSubmitAction(ActionRequest request,
ActionResponse response, Object command, BindException errors)
throws Exception {
// Supongamos que hemos guardado en BDD y ahora nos interesa mostrar el listado actualizado
}
protected void onSubmitAction(ActionRequest request,
ActionResponse response, Object command, BindException errors)
throws Exception {
// Supongamos que hemos guardado en BDD y ahora nos interesa mostrar el listado actualizado
PortletUtils.clearAllRenderParameters(response);
response.setRenderParameter("action", "listar"); }
viernes, 29 de octubre de 2010
COMBO DEPENDIENTE PRIMEFACES
Ésta es la solución que propongo para desarrollar un combo dependiente de otro con Primefaces 2.2.1, y SIN NECESIDAD DE RECARGAR LA PÁGINA:
Éste es el código HTML:
<h:outputLabel for="cuentaGrafica" value="Cuenta: " />
<h:selectOneMenu id="cuentaGrafica" immediate="true"
validator="comboCuentaGraficaValidator"
validatorMessage="Debe seleccionar una cuenta"
value="#{movimientosBean.movimientoDTOGrafica.cuentaDTO.id}">
<f:selectItem itemLabel="Seleccione una opción" itemValue="0" />
<f:selectItems value="#{cuentasBean.listaCuentasDTO}"
var="cuenta" itemLabel="#{cuenta.numeroCuenta}"
itemValue="#{cuenta.id}" />
<p:ajax update="anioGrafica"
actionListener="#{movimientosBean.cargaListaAnios}" />
</h:selectOneMenu>
<h:outputLabel for="anioGrafica" value="Año: " />
<h:selectOneMenu id="anioGrafica"
value="#{movimientosBean.movimientoDTOGrafica.anio.anio}">
<f:selectItem itemLabel="Seleccione una opción" itemValue="0" />
<f:selectItems value="#{movimientosBean.listaAnios}" var="anio"
itemLabel="#{anio.anio}" itemValue="#{anio.anio}" />
</h:selectOneMenu>
Y éste es el código Java del Backing Bean:
public void cargaListaAnios(ActionEvent event) {
Integer idCuenta = (Integer) event.getComponent().getAttributes().get(
"value");
try {
setListaAnios(gestorMovimientos.recuperaListaAnios(idCuenta));
} catch (BusinessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Cuando el usuario selecciona una cuenta en el primer combo, salta el Listener asociado al evento de cambio de valor de dicho combo, pudiendo acceder a BDD para cargar el segundo combo con los items dependientes de nuestra elección
Éste es el código HTML:
<h:outputLabel for="cuentaGrafica" value="Cuenta: " />
<h:selectOneMenu id="cuentaGrafica" immediate="true"
validator="comboCuentaGraficaValidator"
validatorMessage="Debe seleccionar una cuenta"
value="#{movimientosBean.movimientoDTOGrafica.cuentaDTO.id}">
<f:selectItem itemLabel="Seleccione una opción" itemValue="0" />
<f:selectItems value="#{cuentasBean.listaCuentasDTO}"
var="cuenta" itemLabel="#{cuenta.numeroCuenta}"
itemValue="#{cuenta.id}" />
<p:ajax update="anioGrafica"
actionListener="#{movimientosBean.cargaListaAnios}" />
</h:selectOneMenu>
<h:outputLabel for="anioGrafica" value="Año: " />
<h:selectOneMenu id="anioGrafica"
value="#{movimientosBean.movimientoDTOGrafica.anio.anio}">
<f:selectItem itemLabel="Seleccione una opción" itemValue="0" />
<f:selectItems value="#{movimientosBean.listaAnios}" var="anio"
itemLabel="#{anio.anio}" itemValue="#{anio.anio}" />
</h:selectOneMenu>
Y éste es el código Java del Backing Bean:
public void cargaListaAnios(ActionEvent event) {
Integer idCuenta = (Integer) event.getComponent().getAttributes().get(
"value");
try {
setListaAnios(gestorMovimientos.recuperaListaAnios(idCuenta));
} catch (BusinessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Cuando el usuario selecciona una cuenta en el primer combo, salta el Listener asociado al evento de cambio de valor de dicho combo, pudiendo acceder a BDD para cargar el segundo combo con los items dependientes de nuestra elección
miércoles, 22 de septiembre de 2010
ENVIAR PETICION POST JAVA
El siguiente código sirve para enviar una petición POST con protocolo 'http' contra una URL, añadiendo a la petición el usuario y contraseña que nos solicitará el servidor, y un XML en forma de cadena:
String protocolo) {
String response = "";
OutputStreamWriter wr = null;
BufferedReader rd = null;
try {
URL url = new URL(request);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// Escribir los parametros en el mensaje
conn.setDoOutput(true);
conn.setAllowUserInteraction(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "text/xml");
conn.setDefaultUseCaches(false);
String auth = username + ":" + password;
conn.setRequestProperty("Authorization", "Basic "
+ Base64.encodeBytes(auth.getBytes()));
wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(datos);
wr.flush();
// Recibir respuesta
conn.connect();
rd = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
// Process line...
response += line;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (wr != null) {
wr.close();
}
if (rd != null) {
rd.close();
}
} catch (IOException ex) {
System.out
.println("Exception al cerrar el lector o el escritor");
}
}
return response;
}
Suscribirse a:
Entradas (Atom)