Menu

Modificar URL

Jose Luis
2014-09-24
2014-10-01
  • Jose Luis

    Jose Luis - 2014-09-24

    Hola Javier,

    Estoy implementando en openxava el controlador de "Cargar y procesar un fichero desde el cliente" del cápitulo 7. Todo funciona correctamente hasta que el controlador "CargarImagen" devuelve el control al controlador de defecto "DEFAULT_CONTROLLERS" y entonces la URL muestra la siguiente dirección:
    "http://localhost:8080/Proyecto/m/CargaImagen?application=Proyecto&module=CargaImagen"
    en vez de
    "http://localhost:8080/Proyecto/m/CargaImagen".

    Mi pregunta es, ¿Como puedo modificar la URL para eliminar, para eliminar de ella "application=Proyecto&module=CargaImagen" ?

    He estado debugeando no encuentro la línea donde se introduce "application=Proyecto&module=CargaImagen" dentro de la URL.

    Gracias

    Un Saludo

     
  • Javier Paniza

    Javier Paniza - 2014-09-26

    Hola José Luis,

    lo he probado y efectivamente sí que añade los parametros. Ahora mismo no sé en que parte se añaden ni por que, tendría que mirármelo con detenimiento.

    ¿Por qué los quieres quitar?


    Ayuda a otros en este foro como yo te ayudo a ti.

     
  • Jose Luis

    Jose Luis - 2014-09-26

    Hola Javier,

    La razón es por estética de cara al usuario, por solicitud del cliente y porque muestra información de la aplicación.

    Ahora me ha surgido otro error, abro el módulo donde subo el fichero para su procesamiento y cuando vuelvo abrir el módulo entra en un bucle infinito al intentar cargarlo de nuevo. El navegador se muestra cargando y las trazas de la consola TOMCAT muestra las mismas trazas de consulta de HIBERNATE. También entra en un bucle infinito cuando pulso el botón de cargar fichero y no le meto ningún fichero.

    Esta vez he modificado los controladores:
    <controlador nombre="prepararFichero">
    <accion nombre="prepararFichero" clase="org.miEmpresa.Suscr.actions.PrepararFichero" al-iniciar="true">
    <usa-objeto nombre="xava_view"/>
    <usa-objeto nombre="xava_newImageProperty"/>
    </accion>
    </controlador>

    <controlador nombre="lecturaFichero">
        <accion nombre="lecturaFichero"
            clase="org.miEmpresa.Suscr.actions.LecturaFicheroBajas">                            
        </accion>
    </controlador>
    

    El controlador "lecturaFichero"="CargarImagen" que es donde carga el fichero subido por el cliente, estoy creando 2 ficheros dentro del servidor.¿No sé si esto afectará eso en el bucle?. El código es exactamente lo mismo pero con el código para crear los 2 ficheros.

    He estado debugueando y no sé lo que produce el bucle.

     

    Last edit: Jose Luis 2014-09-29
  • Javier Paniza

    Javier Paniza - 2014-09-29

    Hola José Luis,

    La razón es por estética de cara al usuario

    ¿Desde cuando la estética de la URL tiene importancia? Mira esta es una URL típica de Liferay:

    /es/web/guest/demos?p_p_auth=Q1ADztKp&p_p_id=88&p_p_lifecycle=0&p_p_state=maximized&p_p_mode=view&p_p_col_count=1&_88_struts_action=%2Flayout_management%2Fedit_pages&_88_tabs1=public-pages&_88_redirect=%2Fes%2Fweb%2Fguest%2Fdemos&_88_groupId=14&_88_selPlid=34633

    Y mucha gente usa Liferay sin quejarse de que la URL no es bonita.

    Yo personalmente no lo voy a arreglar porque tengo una lista de bugs pendiente de arreglar que más importantes. Pero si piensas que merece la pena lo puedes arreglar tu mismo y contribuir el arreglo, lo incluiriamos en OpenXava. Lo que sospecho es que posiblemente esos parámetros estén ahí por algo, así que a lo mejor no te es tan fácil. Pero si tu usuario está dispuesta a pagar tu tiempo, allá él.

    En cuanto al otro problema, he probado con lo de cargar imagen incluido en OpenXava y funciona bien, no he conseguido reproducir tu problema, será algo de tu código. Pon el código fuente de tus clases, para ver si veo algo y te puedo dar alguna pista.


    Ayuda a otros en este foro como yo te ayudo a ti.

     
  • Jose Luis

    Jose Luis - 2014-09-29

    Hola Javier,

    Vale me voy a olvidar de modificar la URL. Me voy a centrar en el error del bucle infinito cuando subes un fichero. Este mi código fuente:

    archivo=>aplicacion.xml

    <modulo nombre="ModuloSubida">  
        <modelo nombre="ModuloSubida"/>     
                <vista-web url="xava/editors/cambiarImagen.jsp"/>
        <controlador nombre="CambiarImagen"/>
            <controlador-modo nombre="DetailOnly"/>
    </modulo>
    

    archivo=>controladores.xml

    <controlador nombre="CargarImagen">
    <accion nombre="cargarImagen" clase="org.miEmpresa.Suscr.actions.CargarImagen">
    <usa-objeto nombre="xava_view"/>
    <usa-objeto nombre="xava_newImageProperty"/>
    </accion>
    </controlador>

    <controlador nombre="CambiarImagen">
        <accion nombre="cambiarImagen"     clase="org.miEmpresa.Suscripcion.actions.CambiarImagen" oculta="false" modo="detail"/>                            
    </controlador>
    

    archivo=>CambiarImagen.java

    public class CambiarImagen extends BaseAction implements ILoadFileAction{

    public void execute() throws Exception{
    
    }
    
    public String[] getNextControllers(){
        return new String[] {"CargarImagen" };
    
    }
    
    public String getCustomView(){
    
        return "xava/editors/cambiarImagen.jsp";
    
    }
    
    public boolean isLoadFile(){
        return true;
    }
    
        public String getNextMode() {        
        return IChangeModeAction.DETAIL;
    }
    

    }

    archivo=>CargarImagen.java

    public class CargarImagen extends BaseAction implements INavigationAction,IProcessLoadedFileAction{

    private List fileItems;
    private View view;
    private String newImageProperty;
    
    private File ficheroError = null;
    private BufferedWriter bwError = null;
    private String rutaError = null;
    
    private File ficheroOK = null;
    private BufferedWriter bwOK = null;
    private String rutaOK = null;
    
    private List<String> lista1;
    private List<String> lista2;
    
    @Inject
    private String ficheroBajada;
    
    @Inject
    private String multipleBBDD;
    
    public void execute() throws Exception{
        ficheroBajada = "";
        String fichero = "";
    
        rutaError = getRequest().getSession().getServletContext().getRealPath("cambiarImagen.jsp");
        rutaError = rutaError.replaceAll("cambiarImagen.jsp", "moduloUsSuscr/InformeError.txt");
        ficheroError = new File(rutaError);
    
        rutaOK = getRequest().getSession().getServletContext().getRealPath("cambiarImagen.jsp");
        rutaOK = rutaOK.replaceAll("cambiarImagen.jsp", "moduloUsSuscr/InformeOK.txt");
        ficheroOK = new File(rutaOK);
    
        if(ficheroError.exists()) {
            ficheroError.delete();
        }
    
        if(ficheroOK.exists()) {
            ficheroOK.delete();
        }
        bwError = new BufferedWriter(new FileWriter(ficheroError));
        bwError.write("---------------Informe de Errores---------------------");
    
        if(ficheroOK.exists()) {
            ficheroOK.delete();
        }
        bwOK = new BufferedWriter(new FileWriter(ficheroOK));
        bwOK.write("---------------Informe de Bajas---------------------");
    
        Iterator i = getFileItems().iterator();
        while (i.hasNext()){
            FileItem fi = (FileItem)i.next();                         
            String fileName = fi.getName();
    
            if (!Is.emptyString(fileName)) {
                fichero = fileName;
                lista1= new ArrayList<String>();
                lista2= new ArrayList<String>();
                transformarListas(fi.get());
            }
    
        }
    
        try{
            if(lista1!= null){
                for(int j = 0;j < msisdn.size(); j++){
                    tratamiento(lista1.get(j));
                }
            }
        } 
        catch (Exception ex) {
            Log_out log_out = new Log_out(this.getClass());
            Modules modulos = new Modules();
    
            modulos.setCurrent("MiEmpresa", "modulo");
            String causa = null;
            if (ex.getCause() != null) {
                causa = ex.getCause().getMessage();
            } else {
                causa = ex.getMessage();
            }
            String mensaje = "[USUARIO: " + Users.getCurrentUserInfo().getId()
                    + "]" + "[MODULO: Modulo] -- Método: execute " + " ==> "
                    + causa + "\n";
            log_out.logERROR(mensaje, modulos.getCurrentIdFolderModule());
            addError("no_execute_action");
            mensaje = null;
            causa = null;
            log_out = null;
            modulos = null;
        } finally {
           try {
                if (null != ficheroError){
                    bwError.close();
                }
                if (null != ficheroOK){
                    bwOK.close();
                }
           } catch (Exception e2) {
    
           }
        }
    }
    
    public String[] getNextControllers() {
        return new String[] {"CargarImagen" };
    }
    
    public String getCustomView() {
        return "xava/editors/cambiarImagen.jsp";
    }
    
    public List getFileItems(){
        return fileItems;
    }
    
    public void setFileItems(List fileItems){
        this.fileItems=fileItems;
    }
    
    public View getView(){
        return view;
    }
    
    public void setView(View view){
        this.view=view;
    }
    
    public String getNewImageProperty(){
        return newImageProperty;
    }
    
    public void setNewImageProperty(String newImageProperty){
        this.newImageProperty=newImageProperty;
    }
    
    private void transformarListas(byte[] contenido){
        String elemento = "";
        for(int i=0;i<contenido.length;i++){
            if(contenido[i]!=10 && contenido[i]!=13){
                elemento += (char)contenido[i];
            }
            else if(contenido[i]==10){
                if(elemento.contains(";")){
                    lista2.add(elemento);
                }
                else{
                    lista1.add(elemento);
                }
                elemento = "";
            }
        }
    }
    
    private void tratamiento(String lista1){
    
        //Código que trata la información recogida en el fichero subido por el cliente
    }
    

    }

    COMO REPRODUCIR EL ERROR==>
    Mi proyecto tiene integrado naviox, y el error surge cuando vuelvo a cargar el módulo de subida de ficheros después de ejecutarse el controlador "cambiarImagen" y entra en el bucle Infinito. Estos son los paso para provocar el bucle:

    1º) Ejecutas el modulo "cambiarImagen".
    2º) Pulsas el botón "cambiar" o "Cambiar Imagen".
    3º) Vuelves a cargar el módulo Imagen, a través del menú de navegación de Naviox.
    4º) Surge el bucle.

    Muchas Gracias por contestar.
    Un Saludo.

     
  • Javier Paniza

    Javier Paniza - 2014-10-01

    Hola José Luis,

    en tu clase CargarImagen has de sustituir esto:

    public String[] getNextControllers() {
        return new String[] {"CargarImagen" };
    }
    
    public String getCustomView() {
        return "xava/editors/cambiarImagen.jsp";
    }
    

    por esto otro:

    public String[] getNextControllers() {
        return DEFAULT_CONTROLLERS;
    }
    
    public String getCustomView() {
        return DEFAULT_VIEW;
    }
    

    Fíjate en el ejemplo que hay en la wiki.


    Ayuda a otros en este foro como yo te ayudo a ti.

     

Log in to post a comment.