2012-04-10 19 views
0

1.1, IceFaces 3.0.1 und JSF 2.1 und versuchte mit ace: filenentry zu arbeiten. Ich kann nicht verstehen, warum der Hörer niemals gerufen wird! Sogar die IDE sendet mir eine Warnung "pruebaBean.sampleListener ist eine unbekannte Eigenschaft". Hier ist ein kurzes Beispiel von dem, was ich mache. Wenn Sie auf den Senden-Button klicken, passiert nichts. Kann mir jemand helfen ?? Könnte eine Art Bug sein?Icefaces 3.0.1 FileEntry: FileEntryListener heißt niemals

prueba.xhtml:

<?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:ice="http://www.icesoft.com/icefaces/component" 
     xmlns:ace="http://www.icefaces.org/icefaces/components"> 

<h:head> 
</h:head> 
<h:body> 
    <ice:form id="usuarioForm"> 
     <ice:panelGrid columns="2"> 
      <ace:fileEntry id="fileEntryImage" absolutePath="c:\iTablero\imagenes" 
          useSessionSubdir="false" useOriginalFilename="false" 
          fileEntryListener="#{pruebaBean.sampleListener}"/> 
      <ice:commandButton type="submit" value="Subir archivo"/> 
     </ice:panelGrid> 
     <ice:messages/> 
    </ice:form> 
</h:body> 

PruebaBean.java:

package com.itablero.backingbeans; 

import java.io.Serializable; 
import javax.annotation.ManagedBean; 
import javax.faces.bean.RequestScoped; 
import org.icefaces.ace.component.fileentry.FileEntry; 
import org.icefaces.ace.component.fileentry.FileEntryEvent; 
import org.springframework.stereotype.Controller; 

@ManagedBean 
@Controller 
@RequestScoped 
public class PruebaBean implements Serializable { 

    public void sampleListener (FileEntryEvent e) { 
     System.out.println("it work!"); 
     FileEntry fe = (FileEntry) e.getComponent(); 
     //some others operations 
    } 
} 

Update 1

Dank @fischermatte fand ich das Problem Eis ersetzen war : Befehlsschaltfläche für h: commandButton. Aber als ich das auf das ursprüngliche vollständige Formular anwandte und nicht funktionierte. Die fileEntryListener-Methode wird nie aufgerufen. Kann jemand den Fehler hier sehen? Logischerweise haben das vorherige Beispiel und der folgende Code die gleiche Datei web.xml, faces-config.xml usw. Beachten Sie, dass die Schaltfläche zum Übermitteln der Datei h: commandButton und ein ice: commandButton für das vollständige Formular vorhanden ist. Ich habe schon versucht, dieses Bild zu ändern: cb. Hier ist die ursprüngliche Form ist (dh die Anzeige in einem Popup/modale Fenster) und Bohnen:

usuariosList.xhtml

   <ice:panelPopup rendered="#{usuariosBean.showPopup}" 
          visible="#{usuariosBean.showPopup}" 
          modal="true" 
          autoCentre="true"> 

       <f:facet name="header"> 
        <h:panelGroup> 
         <h:panelGroup style="float: left;"> 
          Usuario 
         </h:panelGroup> 
         <h:panelGroup style="float: right;"> 
          <ice:form> 
          <h:commandButton image="/resources/images/popup-close.png" 
              alt="Cerrar" title="Cerrar" 
              style="height: 11px; width: 11px; border: 0;" 
              action="#{usuariosBean.closePopup}"/> 
          </ice:form> 
         </h:panelGroup> 
        </h:panelGroup> 
       </f:facet> 
       <f:facet name="body"> 
        <ice:form id="usuarioForm"> 
         <ice:panelGrid columns="2"> 
          <p>Nombre:</p> 
          <ice:inputText id="nombre" label="nombre" value="#{usuariosBean.usuario.nombre}" size="40" /> 
          <p>Imagen:</p> 
          <ice:graphicImage value="#{usuariosBean.usuario.imagen}"/> 
          <ace:fileEntry id="fileEntryImage" absolutePath="c:\iTablero\imagenes" 
              useSessionSubdir="false" useOriginalFilename="false" 
              fileEntryListener="#{usuariosBean.formListener}"/> 
          <h:commandButton type="submit" value="Subir archivo"/> 
         </ice:panelGrid> 
         <ice:messages for="usuarioForm"/> 
         <ice:commandButton value="Guardar" action="#{usuariosBean.save()}" /> 
        </ice:form> 
       </f:facet>      
      </ice:panelPopup> 

UsuariosBean.java

package com.itablero.backingbeans; 

import com.itablero.excepciones.DAOException; 
import com.itablero.modelo.Usuario; 
import com.itablero.servicios.AdminService; 
import java.io.Serializable; 
import java.util.List; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 
import org.icefaces.ace.component.fileentry.FileEntry; 
import org.icefaces.ace.component.fileentry.FileEntryEvent; 
import org.icefaces.ace.component.fileentry.FileEntryResults; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 

@ManagedBean 
@Controller 
@ViewScoped 
public class UsuariosBean implements Serializable { 

@Autowired 
private AdminBean adminBean; 
@Autowired 
private AdminService adminService; 
private Usuario usuario = new Usuario(); 
private boolean showPopup; 

//getter and setters 

public boolean isShowPopup() { 
    return showPopup; 
} 

public void setShowPopup(boolean showPopup) { 
    this.showPopup = showPopup; 
} 


public void openPopup() { 
    this.showPopup = true; 
} 

public void closePopup() { 
    this.showPopup = false; 
    this.usuario = new Usuario(); 
} 

public String edit(Usuario usuario) { 
    this.usuario = usuario; 
    this.showPopup = true; 
    return "usuariosList"; 
} 

public String delete(Usuario usuario) { 
    adminService.delete(usuario); 
    return "usuariosList"; 
} 

public String save() { 
    try { 
     usuario.setTutor(adminBean.getLoggedTutor()); 
     adminService.save(usuario); 
    } catch (DAOException ex) { 
     Logger.getLogger(TutoresBean.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    usuario = new Usuario(); 
    this.showPopup = false; 
    return "usuariosList"; 
} 

public void formListener(FileEntryEvent e) { 
    System.out.println("Entro"); 
    FileEntry fe = (FileEntry)e.getComponent(); 
    FileEntryResults results = fe.getResults(); 
    //other stuff 
} 

} 

Update 2

Ich denke, ich habe herausgefunden, warum nicht funktioniert, aber brauche etwas Hilfe bei der Behebung. Ich habe die Korrekturen vorgenommen wie @fischermatte mich beraten hat, aber nicht funktioniert.

Um diese Seite mit dem Formular zu erreichen, müssen Sie zunächst durch die Hauptseite navigieren /admin/admin.html, wenn ein Blick die URL im Browser http://localhost:8084/iTablero/admin/admin.html erscheint. Diese Seite hat ein Menü, eine dieser Menüoptionen bringt mich auf die Seite mit dem problematischen Formular. Aber, weil ein AJAX Anruf ist (wenn ich nicht falsch liege) die URL im Browser ändert sich nicht, es behält die http://localhost:8084/iTablero/admin/admin.html. Und der FileEntry ruft niemals den Listener auf. Jetzt, wenn ich die URL von mir http://localhost:8084/iTablero/admin/usuariosList.html eingeben, wird die Seite korrekt wie zuvor angezeigt, aber jetzt funktioniert die FILEENTRY PERFEKT !!! Ich habe keine Ahnung, wie das zu beheben ist, muss Redirects verwenden? Ich denke, ist etwas um AJAX ....... Hilfe pls! :-D


Update 3

, dass das Menü ist, ohne Umleitung funktioniert nicht.

 <h:form> 
      <ice:menuBar orientation="horizontal"> 
       <ice:menuItem value="Tutores" action="tutoresList"/> 
       <ice:menuItem value="Usuarios" action="usuariosList"/> 
       <ice:menuItem value="Tableros" action="tablerosList"/> 
       <ice:menuItem value="Simbolos" action="simbolosList"/> 
       <ice:menuItem value="Estadisticas" action="estadisticas"/> 
       <ice:menuItem value="Salir" action="#{adminBean.logout()}"/> 
      </ice:menuBar> 
     </h:form> 

Mit action="usuariosList?faces-redirect=true" funktioniert gut. Testen Sie bereits mit Vorwärtsnavigation zu einem einfachen Seitenformular mit nur einem FileEntry und funktioniert auch nicht. Auch wenn ich Redirect verwende, funktioniert es gut. Ich denke, ist eine Art Problem mit dieser Komponente und Vorwärtsnavigation.

+0

können Sie Ihre Datei faces-config.xml einfügen und Ihre web.xml und vervollständige auch Java Bean und vervollständige XHTML, ich arbeite gerade am FileEntry Modul und könnte helfen. – Rachel

Antwort

0

Sie müssen JSFs Befehlsschaltfläche anstelle von Icefaces verwenden: <h:commandButton type="submit" value="Subir archivo"/>. Es ist ein bekanntes Problem in ICEFaces, siehe .

Update 1

Und Sie entweder das gerenderte Attribut in dem Popup entfernen oder das Popup aktualisieren, wenn es wie hier öffnen:

<h:form> 
    <h:commandButton value="Show Popup" action="#{usuariosBean.showPopupAction}"> 
     <f:ajax render=":popupPanelGroup"/> 
    </h:commandButton> 
</h:form> 
<h:panelGroup id="popupPanelGroup"> 
    <ice:panelPopup visible="#{usuariosBean.showPopup}" rendered="#{usuariosBean.showPopup}" modal="true" autoCentre="true"> 
    ... 
    </ice:panelPopup> 
</h:panelGroup> 
+0

Du hast recht, das war das Problem in dem Beispiel gepostet! Ich benutze h: commandButton und der actionListener wird aufgerufen. Aber das Seltsame ist, wenn ich dies auf das vollständige Formular anwende und nicht funktioniert habe. Ich werde das vollständige Formular posten, das die ursprüngliche Frage bearbeitet. – Fisu

+0

Das hat etwas damit zu tun, wie Sie das Popup öffnen, denke ich. Funktioniert es, wenn Sie das gerenderte Attribut entfernen und einfach ''? – fischermatte

+0

sehe mein Update 1 – fischermatte