Icefaces 3.0.1 FileEntry: FileEntryListener nigdy nie jest wywoływany

1.1, IceFaces 3.0.1 i JSF 2.1 i próbował pracować z asem: fileentry. Nie mogę zrozumieć, dlaczego słuchacz nigdy nie jest wywoływany! Nawet IDE wysyła mi ostrzeżenie „pruebaBean.sampleListener to nieznana właściwość”. Oto krótki przykład tego, co robię. Po kliknięciu przycisku przesyłania nic się nie dzieje. Czy ktoś może mi pomóc? Czy może być jakiś błąd?

prueba.xhtml:

<code><?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>
</code>

PruebaBean.java:

<code> 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
     }
 }
</code>
Aktualizacja 1

Dzięki @fischermatte znalazłem problem polegający na zastąpieniu lodu: commandButton dla h: commandButton. Ale kiedy zastosowałem to do oryginalnego kompletnego formularza i nie zadziałało. Metoda fileEntryListener nigdy nie jest wywoływana. Czy ktoś może zobaczyć błąd tutaj? Logicznie poprzedni przykład i poniższy kod mają ten sam plik web.xml, faces-config.xml itd. Zauważ, że przycisk do przesłania pliku to h: commandButton, a tam jest lód: commandButton dla pełnego formularza. Próbowałem już to zmienić por en h: cb. Oto oryginalna forma (wyświetlana w oknie popup / modalnym) i fasola:

usuariosList.xhtml

<code>                <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>
</code>

UsuariosBean.java

<code>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
}

}
</code>
Aktualizacja 2

Myślę, że zrozumiałem, dlaczego nie działa, ale potrzebuję pomocy z poprawką. Dokonałem korekt, jak radzi mi @fischermatte, ale nie działa.

Aby dotrzeć do tej strony za pomocą formularza, najpierw należy przejść do strony głównej/admin/admin.html, jeśli pojawi się adres URL w przeglądarcehttp://localhost:8084/iTablero/admin/admin.html. Ta strona ma menu, jedna z tych opcji menu wprowadza mnie na stronę z problematyczną formą. Ale ponieważ jest to wywołanie AJAX (jeśli się nie mylę), URL w przeglądarce się nie zmienia, zachowujehttp://localhost:8084/iTablero/admin/admin.html. A fileEntry nigdy nie wywołuje słuchacza. Teraz, jeśli sam wprowadzę adres URLhttp://localhost:8084/iTablero/admin/usuariosList.html, strona jest wyświetlana poprawnie jak poprzednio, ale teraz FILEENTRY DZIAŁA PERFEKCYJNIE !!! Nie mam pojęcia, jak to naprawić, będę musiał użyć przekierowań? Myślę, że jest coś wokół AJAX ....... pls pomocy! :-RE

Aktualizacja 3

To jest menu, bez przekierowania nie działa.

<code>       <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>
</code>

Zaction="usuariosList?faces-redirect=true" działa w porządku. Już testuj z nawigacją do przodu do podstawowego formularza strony z tylko FileEntry i nie działa też. Ponownie, jeśli używam przekierowania, działa dobrze. Myślę, że jest to jakiś problem z tym komponentem i nawigacją do przodu.

questionAnswers(1)

yourAnswerToTheQuestion