Guten Tag,
ich bin gerade neu hier angekommen und starte gleich mal mit meinem momentanen Problem.
Ich entwickle eine Webapplikation mit JSF und Tomcat (v6.0). Nun will ich dem Benutzer einer Administrationsfläche gestatten ein Bild hochzuladen und dieses anschliessend zuzuschneiden.
Für beides bietet PrimeFaces ideale Lösungen. (FileUpload / ImageCropper)
Nun versuche ich seit geraumer Zeit, PrimeFaces zu integrieren. Ich habe die aktuelle Version 2.1 eingebunden.
Nun, mein JSP für den FileUpload beinhaltet folgendes:
Dies klappt auch soweit so gut, das Problem ist jedoch, dass bei meinem FileUploadController kein Event ankommt.
FileUploadController
Mein web.xml sieht folgendermassen aus:
[XML]<welcome-file-list>
<welcome-file>/index.jsf</welcome-file>
</welcome-file-list>
<!-- Primefaces -->
<filter>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
<init-param>
<param-name>uploadDirectory</param-name>
<param-value>C:\Dokumente und Einstellungen\<User>\Desktop</param-value>
</init-param>
<init-param>
<param-name>thresholdSize</param-name>
<param-value>51200</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<!-- Primefaces -->
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<!--
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.jsf</param-value>
</context-param>
-->
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<context-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>/WEB-INF/faces-config.xml</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<!-- For Primefaces -->
<servlet>
<servlet-name>Resource Servlet</servlet-name>
<servlet-class>org.primefaces.resource.ResourceServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Resource Servlet</servlet-name>
<url-pattern>/primefaces_resource/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>com.sun.faces.allowTextChildren</param-name>
<param-value>true</param-value>
</context-param>
<!-- For Primefaces -->
<!-- SECURITY MANAGEMENT -->
<security-role>
<description>Sicherheitsrolle für Administrationszugang</description>
<role-name>admin</role-name>
</security-role>
<security-constraint>
<display-name>Security Constraint</display-name>
<web-resource-collection>
<web-resource-name>Protected Area</web-resource-name>
<url-pattern>/secure/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>Form-based Authentication</realm-name>
<form-login-config>
<form-login-page>/secure/login.jsf</form-login-page>
<form-error-page>/secure/denied.html</form-error-page>
</form-login-config>
</login-config>
</web-app>[/XML]
Den faces-config.xml Eintrag bezüglich des UploadControllers:
Wenn ich ein File per FileChooser des PrimeFaces-Elements "fileUpload" auswähle, sollte der "auto="true"-Tag verantwortlich sein, dass das File sofort hochgeladen wird. Geschieht nichts, kein Fehler, keine Ausgabe des Controllers - einfach nichts. Deshalb vermute ich, dass etwas in meiner Konfiguration nicht in Ordnung ist. Da ich jedoch PrimeFaces das erste Mal benutze finde ich darin nichts, was mich stutzen lassen würde....
Habt ihr eine Idee, wo mein Problem liegen könnte?
=> Danach gehts weiter zum ImageCropper, der sollte das File wieder einlesen und zum zuschneiden anzeigen, das Bild (welches ich zum Testen mit absolutem Pfad angab) erscheint, jedoch kein Auswahlfeld - womit man das Bild zuschneiden könnte... *hüstel*
Nun, ich hoffe ihr könnt mir bei meinem FileUpload-"Problem" helfen...!
In freudiger Erwartung,
Zireal
ich bin gerade neu hier angekommen und starte gleich mal mit meinem momentanen Problem.
Ich entwickle eine Webapplikation mit JSF und Tomcat (v6.0). Nun will ich dem Benutzer einer Administrationsfläche gestatten ein Bild hochzuladen und dieses anschliessend zuzuschneiden.
Für beides bietet PrimeFaces ideale Lösungen. (FileUpload / ImageCropper)
Nun versuche ich seit geraumer Zeit, PrimeFaces zu integrieren. Ich habe die aktuelle Version 2.1 eingebunden.
Nun, mein JSP für den FileUpload beinhaltet folgendes:
Java:
<h:form id="newarticleformular" prependId="false" enctype="multipart/form-data">
<p:fileUpload id="upload" auto="true" fileUploadListener="#{fileUploadController.handleFileUpload}"
allowTypes="*.jpg;*.png;*.gif;" description="Images"/>
</h:form>
Dies klappt auch soweit so gut, das Problem ist jedoch, dass bei meinem FileUploadController kein Event ankommt.
FileUploadController
Java:
package ch.vote2buy.jsf.controller;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.UploadedFile;
public class FileUploadController {
private UploadedFile file;
public void handleFileUpload(FileUploadEvent event)
{
System.out.println("FileUpload finished");
file = event.getFile();
ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
String newFileName = servletContext.getRealPath("") + File.separator + "uploaded" + File.separator+ file.getFileName();
FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded.");
FacesContext.getCurrentInstance().addMessage(null, msg);
try {
FileOutputStream fos = new FileOutputStream(new File(newFileName));
InputStream is = file.getInputstream();
int BUFFER_SIZE = 8192;
byte[] buffer = new byte[BUFFER_SIZE];
int a;
while(true) {
a = is.read(buffer);
if(a < 0) break;
fos.write(buffer, 0, a);
fos.flush();
}
fos.close();
is.close();
} catch(IOException e) { }
}
}
Mein web.xml sieht folgendermassen aus:
[XML]<welcome-file-list>
<welcome-file>/index.jsf</welcome-file>
</welcome-file-list>
<!-- Primefaces -->
<filter>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
<init-param>
<param-name>uploadDirectory</param-name>
<param-value>C:\Dokumente und Einstellungen\<User>\Desktop</param-value>
</init-param>
<init-param>
<param-name>thresholdSize</param-name>
<param-value>51200</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<!-- Primefaces -->
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<!--
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.jsf</param-value>
</context-param>
-->
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<context-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>/WEB-INF/faces-config.xml</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<!-- For Primefaces -->
<servlet>
<servlet-name>Resource Servlet</servlet-name>
<servlet-class>org.primefaces.resource.ResourceServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Resource Servlet</servlet-name>
<url-pattern>/primefaces_resource/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>com.sun.faces.allowTextChildren</param-name>
<param-value>true</param-value>
</context-param>
<!-- For Primefaces -->
<!-- SECURITY MANAGEMENT -->
<security-role>
<description>Sicherheitsrolle für Administrationszugang</description>
<role-name>admin</role-name>
</security-role>
<security-constraint>
<display-name>Security Constraint</display-name>
<web-resource-collection>
<web-resource-name>Protected Area</web-resource-name>
<url-pattern>/secure/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>Form-based Authentication</realm-name>
<form-login-config>
<form-login-page>/secure/login.jsf</form-login-page>
<form-error-page>/secure/denied.html</form-error-page>
</form-login-config>
</login-config>
</web-app>[/XML]
Den faces-config.xml Eintrag bezüglich des UploadControllers:
Java:
<managed-bean>
<managed-bean-name>fileUploadController</managed-bean-name>
<managed-bean-class>ch.vote2buy.jsf.controller.FileUploadController</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
Wenn ich ein File per FileChooser des PrimeFaces-Elements "fileUpload" auswähle, sollte der "auto="true"-Tag verantwortlich sein, dass das File sofort hochgeladen wird. Geschieht nichts, kein Fehler, keine Ausgabe des Controllers - einfach nichts. Deshalb vermute ich, dass etwas in meiner Konfiguration nicht in Ordnung ist. Da ich jedoch PrimeFaces das erste Mal benutze finde ich darin nichts, was mich stutzen lassen würde....
Habt ihr eine Idee, wo mein Problem liegen könnte?
=> Danach gehts weiter zum ImageCropper, der sollte das File wieder einlesen und zum zuschneiden anzeigen, das Bild (welches ich zum Testen mit absolutem Pfad angab) erscheint, jedoch kein Auswahlfeld - womit man das Bild zuschneiden könnte... *hüstel*
Nun, ich hoffe ihr könnt mir bei meinem FileUpload-"Problem" helfen...!
In freudiger Erwartung,
Zireal