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

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

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:

private static String conexionPOST(String request, String datos,
            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;
    }