1.1,IceFaces 3.0.1和JSF 2.1,並試圖與ace:fileentry一起工作。我不明白爲什麼聽衆永遠不會被叫到!即使IDE發給我一個警告「pruebaBean.sampleListener是一個未知屬性」。 這是我正在做的一個簡短的例子。當點擊提交按鈕時什麼也沒有發生。 有人可以幫助我嗎?可能是某種錯誤?Icefaces 3.0.1 FileEntry:FileEntryListener永遠不會被調用
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
}
}
更新1
感謝@fischermatte我發現這個問題是代替冰:的commandButton對於h:commandButton。但是,當我將這個應用到原始的完整形式,並沒有工作。 fileEntryListener方法永遠不會被調用。有人可以在這裏看到錯誤嗎? 邏輯上,前面的示例和下面的代碼具有相同的web.xml,faces-config.xml等。注意提交文件的按鈕是h:commandButton,並且存在完整形式的ice:commandButton。我已經試圖改變這個por en h:cb。 這裏是原始形式(即在彈出顯示/模式窗口)和豆:
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
}
}
更新2
我想我想出了爲什麼不能正常工作,但需要一些幫助。我作了@fischermatte的更正,建議我,但沒有奏效。
要使用表單訪問此頁面,首先必須導航拋出主頁面/admin/admin.html
,如果在瀏覽器中看到URL,則出現http://localhost:8084/iTablero/admin/admin.html
。這個頁面有一個菜單,其中一個菜單選項將我帶到問題表單的頁面。但是,因爲是AJAX調用(如果我沒有錯)瀏覽器中的URL不會改變,它會保留http://localhost:8084/iTablero/admin/admin.html
。而fileEntry從不會調用監聽器。 現在,如果我自己輸入網址http://localhost:8084/iTablero/admin/usuariosList.html
,頁面會像以前一樣正確顯示,但現在FILEENTRY完美地工作了! 我不知道如何解決這個問題,將不得不使用重定向?我想是圍繞AJAX的東西.......幫助請! :-D
更新3
這是菜單,無需重定向不能正常工作。
<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>
隨着action="usuariosList?faces-redirect=true"
工作正常。 已經使用嚮導導航到只有FileEntry的基本頁面表單並且不起作用。再次,如果我使用重定向,工作正常。我認爲這個組件和轉發導航是一些問題。
可以粘貼您的faces-config.xml文件和你的web.xml,也完整的java bean和完整的xhtml,我現在正在處理fileEntry模塊,並可以提供幫助。 – Rachel 2012-04-10 20:41:38