[JAVA] JSF + MyFaces + Tomahawk fileUpload

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
ubk
Piegowaty Guziec
Piegowaty Guziec
Posty: 13
Rejestracja: 19 lut 2007, 20:32
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

[JAVA] JSF + MyFaces + Tomahawk fileUpload

Post autor: ubk »

Mam problem z wgraniem pliku. Postępuję zgodnie z tutorialem opisanym tutaj. Kiedy robię sobie taką prościutką aplikację wszystko działa ale gdy próbuję wrzucić to do większego projektu aplikacja wywala się w momencie zatwierdzenia formularza. Dostaję taki komunikat:

Kod: Zaznacz cały

2010-01-29 21:19:42 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
java.lang.NullPointerException
        at pl.iwm.LoginUserBean.uploadAvatar(LoginUserBean.java:360)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.el.parser.AstValue.invoke(AstValue.java:172)
        at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
        at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)
        at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:77)
        at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
        at javax.faces.component.UICommand.broadcast(UICommand.java:383)
        at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:447)
        at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)
        at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
        at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
        at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:341)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
Metoda uploadAvatar, na która wskazuje pierwszy błąd:

Kod: Zaznacz cały

public void uploadAvatar() {

        System.out.println("File type: " + uploadedFile.getContentType());
        System.out.println("File name: " + uploadedFile.getName());
        System.out.println("File size: " + uploadedFile.getSize() + " bytes");

        try {
            //String uploadedFileName = FileUtil.trimFilePath(uploadedFile.getName());
            File uniqueFile = FileUtil.uniqueFile(new File("/home/me/upload"), this.login);
            FileUtil.write(uniqueFile, uploadedFile.getInputStream());

            FacesContext.getCurrentInstance().addMessage("fileupload", new FacesMessage(
                    FacesMessage.SEVERITY_INFO, "File upload succeed!", null));

        } catch (IOException e) {

            FacesContext.getCurrentInstance().addMessage("fileupload", new FacesMessage(
                    FacesMessage.SEVERITY_ERROR, "File upload failed with I/O error.", null));

        }
    }
Błąd wskazuje na linię, w której pierwszy raz próbuję się odwołać do uploadowanego pliku.

Mój web.xml:

Kod: Zaznacz cały

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <context-param>
        <param-name>com.sun.faces.verifyObjects</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>com.sun.faces.validateXml</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>client</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>
        <servlet-name>BinaryServlet</servlet-name>
        <servlet-class>pl.iwm.tools.BinaryServlet</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>MakeUserBean</servlet-name>
        <servlet-class>pl.iwm.tools.MakeUserBean</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>Logout</servlet-name>
        <servlet-class>pl.iwm.tools.Logout</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>LoginError</servlet-name>
        <servlet-class>pl.iwm.tools.LoginError</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>DeleteAccount</servlet-name>
        <servlet-class>pl.iwm.tools.DeleteAccount</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>BinaryServlet</servlet-name>
        <url-pattern>/BinaryServlet</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>MakeUserBean</servlet-name>
        <url-pattern>/MakeUserBean</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Logout</servlet-name>
        <url-pattern>/Logout</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>LoginError</servlet-name>
        <url-pattern>/LoginError</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>DeleteAccount</servlet-name>
        <url-pattern>/DeleteAccount</url-pattern>
    </servlet-mapping>

    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/index.jsp</welcome-file>
    </welcome-file-list>
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Secured</web-resource-name>
            <url-pattern>/faces/www/secured/*</url-pattern>
            <http-method>DELETE</http-method>
            <http-method>GET</http-method>
            <http-method>POST</http-method>
            <http-method>PUT</http-method>
        </web-resource-collection>
        <auth-constraint>
            <role-name>*</role-name>
        </auth-constraint>
    </security-constraint>
    <login-config>
        <auth-method>FORM</auth-method>
        <form-login-config>
            <form-login-page>/faces/www/loginForm.jsp</form-login-page>
            <form-error-page>/faces/www/loginForm.jsp</form-error-page>
        </form-login-config>
    </login-config>
    <security-role>
        <role-name>user</role-name>
    </security-role>
    <security-role>
        <role-name>admin</role-name>
    </security-role>
    <security-role>
        <role-name>manager</role-name>
    </security-role>
    <error-page>
        <error-code>403</error-code>
        <location>/LoginError</location>
    </error-page>
    <filter>
        <filter-name>Extensions Filter</filter-name>
        <filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>Extensions Filter</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
    </filter-mapping>
</web-app>

Po ciężkiej nocy googlowania nie mogę rozwiązać tego problemu. Znalazłem tylko coś o mapowaniu Faces Servlet. Moje teraźniejsze ustawienia powodują takie coś, że jak uruchamiam konkretnie welcome-file czyli index.jsp wszystko działa poprawnie, linki przenoszą mnie tam gdzie chce itd., oczywiście do czasu wgrania obrazka. Wtedy wszystko się sypie. Gdy startuje projekt otwiera mi się welcome file, ale żaden z linków w nim zawartych nie kieruje mnie tam gdzie powinien. Więc może coś z tym mapowaniem jest źle? Sam nic w tym nie mieszałem, jest takie jakie ustawia się w netbeansie.

Opisywałem problem na innym forum ale bez odzewu. Help :pt36:
Ubuntu User #25599
Awatar użytkownika
Opalo
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 113
Rejestracja: 07 sty 2009, 09:52
Płeć: Mężczyzna

Odp: [JAVA] JSF + MyFaces + Tomahawk fileUpload

Post autor: Opalo »

Moze to oczywiste, ale ustawiles prawa dostepu do ktalogu gdzie wrzucasz plik? Niestety nie mam kiedy zrobic tego tutoriala, ale jak bede mial chwile to ogarne i moze mi sie cos uda poradzic.
Awatar użytkownika
ubk
Piegowaty Guziec
Piegowaty Guziec
Posty: 13
Rejestracja: 19 lut 2007, 20:32
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [JAVA] JSF + MyFaces + Tomahawk fileUpload

Post autor: ubk »

Problem rozwiązałem tak: strona, na której korzystałem z t:inputFileUpload była includowana za pomocą <%@include file="..." %>. Wchodząc bezpośrednio na nią wszystko działa tak jak powinno. Dziwne, nie rozumiem tego.
Jeśli Ty Opalo albo ktoś inny może mi to wytłumaczyć albo podrzucić jakiś link będę wdzięczny.
Ubuntu User #25599
Awatar użytkownika
Opalo
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 113
Rejestracja: 07 sty 2009, 09:52
Płeć: Mężczyzna

Odp: [JAVA] JSF + MyFaces + Tomahawk fileUpload

Post autor: Opalo »

Mozesz ten swoj projekt wystawic gdzies w necie? Chetnie bym sie przyjrzal. W czym pisales?
Awatar użytkownika
ubk
Piegowaty Guziec
Piegowaty Guziec
Posty: 13
Rejestracja: 19 lut 2007, 20:32
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [JAVA] JSF + MyFaces + Tomahawk fileUpload

Post autor: ubk »

To praca inżynierska więc raczej go nigdzie nie wstawię w całości. No i nie jest jeszcze skończony ;p Jeżeli pytasz o IDE to NetBeans a jeśli o technologie to JSF, Servlety, Hibernate no i trochę MyFaces.
Ubuntu User #25599
Awatar użytkownika
Opalo
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 113
Rejestracja: 07 sty 2009, 09:52
Płeć: Mężczyzna

Odp: [JAVA] JSF + MyFaces + Tomahawk fileUpload

Post autor: Opalo »

Ok, rozumiem ;] Na tej zasadzie to niestety ciezko moze byc o efektywna pomoc.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 12 gości