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.
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