Icefaces 3.0.1 FileEntry: FileEntryListener никогда не вызывается
1.1, IceFaces 3.0.1 и JSF 2.1 и пытался работать с ace: fileentry. Я не могу понять, почему слушатель никогда не вызывается! Даже среда IDE отправляет мне предупреждение "pruebaBean.sampleListener is unknown неизвестно". Вот краткий пример того, что я делаю. При нажатии кнопки «Отправить» ничего не происходит. Кто-нибудь может мне помочь ?? Может быть какая-то ошибка?
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>Update 1
Благодаря @fischermatte я обнаружил, что проблема заключалась в замене ice: commandButton на h: commandButton. Но когда я применил это к исходной полной форме, это не сработало. Метод fileEntryListener никогда не вызывается. Кто-то может увидеть ошибку здесь? Логически предыдущий пример и приведенный ниже код имеют тот же web.xml, face-config.xml и т. Д. Обратите внимание, кнопка для отправки файла - это h: commandButton, и для полной формы есть ice: commandButton. Я уже пытался изменить это por en h: cb. Вот исходная форма (которая отображается во всплывающем / модальном окне) и бин:
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>Update 2
Я думаю, я понял, почему не работает, но нужна помощь с исправлением. Я внес исправления, как совет @fischermatte, но это не сработало.
Чтобы попасть на эту страницу с помощью формы, сначала нужно перейти на главную страницу/admin/admin.html
, если посмотреть URL-адрес в браузере появляетсяhttp://localhost:8084/iTablero/admin/admin.html
, На этой странице есть меню, один из пунктов этого меню выводит меня на страницу с проблемной формой. Но, поскольку это AJAX-вызов (если я не ошибаюсь), URL-адрес в браузере не изменяется, он сохраняетhttp://localhost:8084/iTablero/admin/admin.html
, И fileEntry никогда не вызывает слушателя.
Теперь, если я сам введу URLhttp://localhost:8084/iTablero/admin/usuariosList.html
, страница отображается правильно, как и раньше, но теперь ФИЛЕНТРИЙ РАБОТАЕТ ОТЛИЧНО !!!
Я понятия не имею, как это исправить, придется использовать перенаправления? Я думаю, что-то вокруг AJAX ....... помогите пожалуйста! :-D
То есть меню без перенаправления не работает.
<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>
Сaction="usuariosList?faces-redirect=true"
работает отлично.
Уже тестируйте с переходом вперед на основную форму страницы, используя только FileEntry, и он тоже не работает. Опять же, если я использую редирект, работает нормально. Я думаю, что это какая-то проблема с этим компонентом и навигацией вперед.