java.lang.NoClassDefFoundError:Lorg / apache / myfaces / custom / fileupload / UploadedFile

时间:2014-05-02 10:31:14

标签: maven jsf jpa file-upload tomahawk

我想上传文件并在jsf页面中显示它们,因为我正在使用tomahawk 1.1.12,jsf 2.0和jpa 2,我正在关注BalusC教程,但该项目无法部署并提供错误:java .lang.NoClassDefFoundError:Lorg / apache / myfaces / custom / fileupload / UploadedFile pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>maven.test</groupId>
  <artifactId>mavenTest</artifactId>
  <version>0.0.1-SNAPSHOT</version>
    <repositories>
        <repository>
            <id>oss.sonatype.org</id>
            <name>OSS Sonatype Staging</name>
            <url>https://oss.sonatype.org/content/groups/staging</url>
         </repository>
         <repository>
            <id>prime-repo</id>
            <name>PrimeFaces Maven Repository</name>
            <url>http://repository.primefaces.org</url>
            <layout>default</layout>
         </repository>
          <repository>
              <id>central</id>
              <name>Central Repository</name>
              <url>http://repo.maven.apache.org/maven2</url>
              <layout>default</layout>
              <snapshots>
                <enabled>false</enabled>
              </snapshots>
            </repository>
            <repository>
                <id>apache-maven-snapshots</id>
                <url>
                http://people.apache.org/repo/m2-snapshot-repository
                </url>
                <releases>
                  <enabled>false</enabled>
                </releases>
                <snapshots>
                  <enabled>true</enabled>
                </snapshots>
            </repository>
            <repository>
                <id>myfaces-staging</id>
                <url>
                     http://people.apache.org/builds/myfaces/m2-staging-repository
                </url>
                <releases>
                   <enabled>false</enabled>
                <!--
                Enable to test a MyFaces core release candidate with tomahawk
                -->
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>
     </repositories>

 <dependencies>
     <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>eclipselink</artifactId>
            <version>2.5.0-RC1</version>
            <exclusions>
                <exclusion>
                    <groupId>org.eclipse.persistence</groupId>
                    <artifactId>commonj.sdo</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
         <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-impl</artifactId>
            <version>2.1.11</version>
         </dependency>
         <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <version>2.1.11</version>
         </dependency>
         <dependency>
            <groupId>postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.1-901.jdbc4</version>
         </dependency>
         <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>7.0</version>
         </dependency>
         <dependency>
            <groupId>org.apache.myfaces.tomahawk</groupId>
            <artifactId>tomahawk</artifactId>
            <version>1.1.12</version>
         </dependency>
         <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
         </dependency>
         <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
         </dependency>
         <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
         </dependency>
         <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
         </dependency>
       <!--   <dependency>
            <groupId>org.apache.myfaces.core</groupId>
            <artifactId>myfaces-api</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.myfaces.tomahawk</groupId>
            <artifactId>tomahawk</artifactId>
            <version>1.1.14</version>
        </dependency> 
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.9</version>
        </dependency>-->       
     </dependencies>
</project>

我的托管bean:

package mbeans;

//import java.io.IOException;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.faces.application.FacesMessage;
//import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.Part;

/*
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
//import org.apache.commons.el.Logger;
//import org.apache.log4j.*;
//import org.apache.log4j.spi.LoggerFactory;
*/
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.myfaces.custom.fileupload.UploadedFile;

import daoImpl.DocDAO;
import entities.Document;

//import org.slf4j.*;


@ManagedBean
@RequestScoped
public class DocBean {
    public DocDAO docDAO;
    private Part file;
    private  String titreDocument;
    private  String descriptionDocument;
    private  String lien;
    private  String dateMise;
    private String Categorie;
    private Integer sizeDocument;
    private String sousCategorie;

    public DocBean(){
        docDAO=new DocDAO();
    }

    private UploadedFile uploadedFile;
    private String fileName;

    // Actions ------------------------------------------------------------------------------------

    public void submit() {

        // Just to demonstrate what information you can get from the uploaded file.
        System.out.println("File type: " + uploadedFile.getContentType());
        System.out.println("File name: " + uploadedFile.getName());
        System.out.println("File size: " + uploadedFile.getSize() + " bytes");

        // Prepare filename prefix and suffix for an unique filename in upload folder.
        String prefix = FilenameUtils.getBaseName(uploadedFile.getName());
        String suffix = FilenameUtils.getExtension(uploadedFile.getName());

        // Prepare file and outputstream.
        File file = null;
        OutputStream output = null;

        try {
            // Create file with unique name in upload folder and write to it.
            file = File.createTempFile(prefix + "_", "." + suffix, new File("c:/data"));
            output = new FileOutputStream(file);
            IOUtils.copy(uploadedFile.getInputStream(), output);
            fileName = file.getName();

            // Show succes message.
            FacesContext.getCurrentInstance().addMessage("uploadForm", new FacesMessage(
                FacesMessage.SEVERITY_INFO, "File upload succeed!", null));
        } catch (IOException e) {
            // Cleanup.
            if (file != null) file.delete();

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

            // Always log stacktraces (with a real logger).
            e.printStackTrace();
        } finally {
            IOUtils.closeQuietly(output);
        }
    }

    // Getters ------------------------------------------------------------------------------------

    public UploadedFile getUploadedFile() {
        return uploadedFile;
    }

    public String getFileName() {
        return fileName;
    }

    // Setters ------------------------------------------------------------------------------------

    public void setUploadedFile(UploadedFile uploadedFile) {
        this.uploadedFile = uploadedFile;
    }

    //@EJB
    //private DocDAO fileUploaderEJB;

    //private final static Logger logger = LoggerFactory.getLogger(DocDAO.class);

    //public void handleFileUpload(FileUploadEvent event) {
       /* titreDocument = event.getFile().getFileName();
        //String contentType = event.getFile().getContentType();
        byte[] bytes = event.getFile().getContents();

        Document garbage = new Document();
        garbage.setDescriptionDocument(titreDocument);
        garbage.setFile(bytes);
        garbage.setDescriptionDocument("info about the file");
        fileUploaderEJB.uploadGarbage(garbage);

        //((Log) logger).info("Uploaded: {}");

        FacesMessage msg = new FacesMessage("Succesful", event.getFile()
                .getFileName() + " is uploaded.");
        FacesContext.getCurrentInstance().addMessage(null, msg);*/
    //}
public String upload() throws IOException{
    file.write("C:\\data\\"+getFilename(file));

        return"succes";
    }
    private static String getFilename(Part part){
        for(String cd: part.getHeader("content-disposition").split(";")){
            if(cd.trim().startsWith("filename")){
                String filename=cd.substring(cd.indexOf('=') + 1).trim().replace("\"", "");
                return filename.substring(filename.lastIndexOf('/') + 1).substring(filename.lastIndexOf('\\') + 1);
            }

        }
        return null;
    }
    /*public List<Document> getAlldoc(){
        return docDAO.getAllDoc();
    }
    public String createdoc(){
        docDAO.createDoc(titreDocument, descriptionDocument, sousCategorie, Categorie, sizeDocument, dateMise, lien);;
        sizeDocument=null;
        titreDocument="";
        descriptionDocument="";
        lien="";
        sousCategorie="";
        dateMise="";
        Categorie="";
        return "success";
    }*/


    public String getSousCategorie() {
        return sousCategorie;
    }

    public void setSousCategorie(String sousCategorie) {
        this.sousCategorie = sousCategorie;
    }

    public String getTitreDocument() {
        return titreDocument;
    }

    public void setTitreDocument(String titreDocument) {
        this.titreDocument = titreDocument;
    }

    public String getDescriptionDocument() {
        return descriptionDocument;
    }

    public void setDescriptionDocument(String descriptionDocument) {
        this.descriptionDocument = descriptionDocument;
    }

    public String getDateMise() {
        return dateMise;
    }

    public void setDateMise(String dateMise) {
        this.dateMise = dateMise;
    }

    public String getCategorie() {
        return Categorie;
    }

    public void setCategorie(String categorie) {
        Categorie = categorie;
    }

    public Integer getSizeDocument() {
        return sizeDocument;
    }

    public void setSizeDocument(Integer sizeDocument) {
        this.sizeDocument = sizeDocument;
    }

    public String getLien() {
        return lien;
    }
    public void setLien(String lien) {
        this.lien = lien;
    }


    public Part getFile() {
        return file;
    }
    public void setFile(Part file) {
        this.file = file;
    }
}

我的实体:

package entities;

import java.io.Serializable;
import javax.persistence.*;


/**
 * The persistent class for the document database table.
 * 
 */
@Entity
@Table(name="document")
@NamedQuery(name="Document.findAll", query="SELECT d FROM Document d")
public class Document  {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="\"idDocument\"", unique=true, nullable=false)
    private Integer idDocument;

    @Column(length=45)
    private String categorie;

    @Column(name="\"dateMise\"", length=45)
    private String dateMise;

    @Column(name="\"descriptionDocument\"", length=60)
    private String descriptionDocument;

    @Lob
    @Column
    private byte[] file;

    @Column(length=45)
    private String lien;

    @Column(name="\"sizeDocument\"")
    private Integer sizeDocument;

    @Column(name="\"sousCategorie\"", length=45)
    private String sousCategorie;

    @Column(name="\"titreDocument\"", length=45)
    private String titreDocument;

    public Document() {
    }

    public Integer getIdDocument() {
        return this.idDocument;
    }

    public void setIdDocument(Integer idDocument) {
        this.idDocument = idDocument;
    }

    public String getCategorie() {
        return this.categorie;
    }

    public void setCategorie(String categorie) {
        this.categorie = categorie;
    }

    public String getDateMise() {
        return this.dateMise;
    }

    public void setDateMise(String dateMise) {
        this.dateMise = dateMise;
    }

    public String getDescriptionDocument() {
        return this.descriptionDocument;
    }

    public void setDescriptionDocument(String descriptionDocument) {
        this.descriptionDocument = descriptionDocument;
    }

    public byte[] getFile() {
        return this.file;
    }

    public void setFile(byte[] file) {
        this.file = file;
    }

    public String getLien() {
        return this.lien;
    }

    public void setLien(String lien) {
        this.lien = lien;
    }

    public Integer getSizeDocument() {
        return this.sizeDocument;
    }

    public void setSizeDocument(Integer sizeDocument) {
        this.sizeDocument = sizeDocument;
    }

    public String getSousCategorie() {
        return this.sousCategorie;
    }

    public void setSousCategorie(String sousCategorie) {
        this.sousCategorie = sousCategorie;
    }

    public String getTitreDocument() {
        return this.titreDocument;
    }

    public void setTitreDocument(String titreDocument) {
        this.titreDocument = titreDocument;
    }

}

和我的网页xhtml:

<h:panelGrid columns="3">
                    <h:outputLabel for="file" value="Select file" />
                    <t:inputFileUpload id="file" value="#{docBean.uploadedFile}" required="true" />
                    <h:message for="file" style="color: red;" />

                    <h:panelGroup />
                    <h:commandButton value="Submit" action="#{docBean.submit}" />
                    <h:message for="uploadForm" infoStyle="color: green;" errorStyle="color: red;" />
                </h:panelGrid>
    </h:form>
    <h:outputLink value="file/#{docBean.fileName}" rendered="#{docBean.fileName != null}">
                Download back
            </h:outputLink>

任何想法?

2 个答案:

答案 0 :(得分:0)

<dependency>
    <groupId>org.apache.myfaces.tomahawk</groupId>
    <artifactId>tomahawk</artifactId>
    <version>1.1.12</version>
</dependency>

替换为

<dependency>
    <groupId>org.apache.myfaces.tomahawk</groupId>
    <artifactId>tomahawk20</artifactId>
    <version>1.1.12</version>
</dependency>

答案 1 :(得分:0)

感谢Omar这是我试图仅使用jsf 2.2而没有tomahawk或primefaces上传的版本问题。 解决

相关问题