Ayuda JSF. Problema con commandLink-actionlistener
Publicado por felix (1 intervención) el 05/04/2010 13:36:43
Muy buenas:
Tengo una tabla en jsf, que me devuelve unos datos.
Estos son un nombre del fichero con la ruta donde se encuentra, la fecha de creación del fichero y una breve descripción.
Ahora lo que quiero hacer es que cuando haga click sobre el nombre del fichero, llame a un método para que me abra dicho fichero que puede ser o bien txt ,zip, pdf, html... Y que me lo abra en una ventana distinta previo mensaje si lo que quieres es guardar o abrir dicho fichero.
Pues bien, me da un error la consola del eclipse de método no encontrado.
La parte del código donde llamo al método en el jsf es el siguiente:
(Los datos me los recupera correctamente)
<rich:column>
<h:commandLink id="file" actionListener="#{consultaBean.OpenFile}" value="#{d.fichero}">
<f:param name="fichero" value="#{d.ruta}"/>
</h:commandLink>
</rich:column>
Y el método es el siguiente:
public void OpenFile(final ActionListener ae) throws FileNotFoundException {
// final HtmlCommandLink som = (HtmlCommandLink)
// FacesContext.getCurrentInstance().getViewRoot().findComponent("file");
final String filename = "C:/desarrollo/workspace/CNE-Portal/web/Datos/Exportaciones/Consulta_prueba2.txt";
final FileInputStream is = new FileInputStream(filename);
final String filenameabrir = "ww";// p_actionevent.paramString();
// filename = som.getValue().toString();
try {
final HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
response.setContentType("text/html");
response.addHeader("Content-disposition", "attachment=" + filename);
final OutputStream os = response.getOutputStream();
final byte[] buffer = new byte[1024];
int read = is.read(buffer);
while (read >= 0) {
if (read > 0) {
os.write(buffer, 0, read);
}
read = is.read(buffer);
}
is.close();
os.close();
FacesContext.getCurrentInstance().responseComplete();
} catch (final Exception e) {
try {
e.printStackTrace();
is.close();
} catch (final Exception ex) {
ex.printStackTrace();
}
}
}
He puesto un punto de ruptura en este método pero no llega. Ahora el código no está perfecto pues es una prueba para que me abra un fichero, pero es que ni si quiera me llega al método al hacer click, me da un error de método no hallado.
¿Alguien sabe que puede fallar?
Gracias.
Tengo una tabla en jsf, que me devuelve unos datos.
Estos son un nombre del fichero con la ruta donde se encuentra, la fecha de creación del fichero y una breve descripción.
Ahora lo que quiero hacer es que cuando haga click sobre el nombre del fichero, llame a un método para que me abra dicho fichero que puede ser o bien txt ,zip, pdf, html... Y que me lo abra en una ventana distinta previo mensaje si lo que quieres es guardar o abrir dicho fichero.
Pues bien, me da un error la consola del eclipse de método no encontrado.
La parte del código donde llamo al método en el jsf es el siguiente:
(Los datos me los recupera correctamente)
<rich:column>
<h:commandLink id="file" actionListener="#{consultaBean.OpenFile}" value="#{d.fichero}">
<f:param name="fichero" value="#{d.ruta}"/>
</h:commandLink>
</rich:column>
Y el método es el siguiente:
public void OpenFile(final ActionListener ae) throws FileNotFoundException {
// final HtmlCommandLink som = (HtmlCommandLink)
// FacesContext.getCurrentInstance().getViewRoot().findComponent("file");
final String filename = "C:/desarrollo/workspace/CNE-Portal/web/Datos/Exportaciones/Consulta_prueba2.txt";
final FileInputStream is = new FileInputStream(filename);
final String filenameabrir = "ww";// p_actionevent.paramString();
// filename = som.getValue().toString();
try {
final HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
response.setContentType("text/html");
response.addHeader("Content-disposition", "attachment=" + filename);
final OutputStream os = response.getOutputStream();
final byte[] buffer = new byte[1024];
int read = is.read(buffer);
while (read >= 0) {
if (read > 0) {
os.write(buffer, 0, read);
}
read = is.read(buffer);
}
is.close();
os.close();
FacesContext.getCurrentInstance().responseComplete();
} catch (final Exception e) {
try {
e.printStackTrace();
is.close();
} catch (final Exception ex) {
ex.printStackTrace();
}
}
}
He puesto un punto de ruptura en este método pero no llega. Ahora el código no está perfecto pues es una prueba para que me abra un fichero, pero es que ni si quiera me llega al método al hacer click, me da un error de método no hallado.
¿Alguien sabe que puede fallar?
Gracias.
Valora esta pregunta


0