0

RichFaces では、ファイルをアップロードするためにrich:fileUpload. Add、Upload、および Clear All ボタンを使用rich:fileUploadすると、richfaces liveemo の例で自動的に生成されますが、私の場合、Add、Upload、および Clear All がブラウザにテキストとして表示され、Add、upload、および clearAll をクリックできるように変更する必要があります。web.xml/pom.xmlファイルの設定を変更する必要がありますか。

RichFaces 4 と JSF 2 を使用しています。

これは私の web.xml です:

    <?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">
<display-name>Sample RichFaces 4 Application</display-name>
<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>
<context-param>
    <param-name>javax.faces.SKIP_COMMENTS</param-name>
    <param-value>true</param-value>
</context-param>
<context-param>
    <param-name>org.richfaces.skin</param-name>
    <param-value>#{skinBean.skin}</param-value>
</context-param>
<context-param>
    <param-name>org.richfaces.fileUpload.maxRequestSize</param-name>
    <param-value>1000000000</param-value>
</context-param>
<context-param>
    <param-name>org.richfaces.fileUpload.createTempFiles</param-name>
    <param-value>true</param-value>
</context-param>
<listener>
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
<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>
<mime-mapping>
    <extension>ecss</extension>
    <mime-type>text/css</mime-type>
</mime-mapping>
<welcome-file-list>
    <welcome-file>index.jsf</welcome-file> 
</welcome-file-list>
<login-config>
    <auth-method>BASIC</auth-method>
</login-config>

こんにちは、h:head タグと h:body タグを指定するだけで、これらの追加ボタンと更新ボタンを正しく取得できるようになりましたが、この例外 javax.faces.event.AbortProcessingException が発生し、ファイルがアップロードされていません。リンク「FileUploadの例」。誰でもこの問題から私を助けてくれますか

これは私のxhtmlページです

 <!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:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:a4j="http://richfaces.org/a4j" xmlns:rich="http://richfaces.org/rich">



<ui:composition>
 <h:head>
 <h:outputStylesheet>
    .top {
    vertical-align: top;
    }
.info {
    height: 202px;
    overflow: auto;
    }
</h:outputStylesheet>
</h:head>
<h:body>
<h:form>
    <h:panelGrid columns="2" columnClasses="top,top">
        <rich:fileUpload fileUploadListener="#{fileUploadBean.listener}" id="upload" acceptedTypes="jpg, gif, png, bmp"
            ontyperejected="alert('Only JPG, GIF, PNG and BMP files are accepted');" maxFilesQuantity="5">
            <a4j:ajax event="uploadcomplete" execute="@none" render="info" />
        </rich:fileUpload>
        <h:panelGrid id="info" layout="block">
            <rich:panel bodyClass="info">
                <f:facet name="header">
                    <h:outputText value="Uploaded Files Info" />
                </f:facet>
                <h:outputText value="No files currently uploaded" rendered="#{fileUploadBean.size==0}" />
                <rich:dataGrid columns="1" value="#{fileUploadBean.files}" var="file" rowKeyVar="row">
                    <rich:panel bodyClass="rich-laguna-panel-no-header">
                        <h:panelGrid columns="2">
                            <a4j:mediaOutput element="img" mimeType="image/jpeg" createContent="#{fileUploadBean.paint}"
                                value="#{row}" style="width:100px; height:100px;" cacheable="false">
                                <f:param value="#{fileUploadBean.timeStamp}" name="time" />
                            </a4j:mediaOutput>
                            <h:panelGrid columns="2">
                                <h:outputText value="File Name:" />
                                <h:outputText value="#{file.name}" />
                                <h:outputText value="File Length(bytes):" />
                                <h:outputText value="#{file.length}" />
                            </h:panelGrid>
                        </h:panelGrid>
                    </rich:panel>
                </rich:dataGrid>
            </rich:panel>
            <br/>
            <a4j:commandButton action="#{fileUploadBean.clearUploadData}" render="info, upload" value="Clear Uploaded Data"
                rendered="#{fileUploadBean.size>0}" />
        </h:panelGrid>
    </h:panelGrid>
</h:form>
</h:body>
</ui:composition>
</html> 

これは私の FileUploadBean クラスです

package com.acc.upload;

import java.io.IOException;

import java.io.OutputStream;
import java.util.ArrayList;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import com.acc.fileupload.utils.FileUploadEvent;
import com.acc.fileupload.utils.UploadedFile;


@ManagedBean(name = "fileUploadBean")
@SessionScoped
public class FileUploadBean{

private ArrayList<File> files = new ArrayList<File>();
private int uploadsAvailable = 5;
private boolean autoUpload = false;
private boolean useFlash = true;


public int getSize() {
    if (getFiles().size()>0){
        return getFiles().size();
    }else 
    {
        return 0;
    }
}

public FileUploadBean() {
}

public void paint(OutputStream stream, Object object) throws IOException {
    stream.write(getFiles().get((Integer)object).getData());
}
public void listener(FileUploadEvent event) throws Exception{
    UploadedFile item = event.getUploadedFile();
    File file = new File();
    file.setLength(item.getData().length);
    file.setName(item.getName());
    file.setData(item.getData());
    files.add(file);
    uploadsAvailable--;
}  

public String clearUploadData() {
    files.clear();
    setUploadsAvailable(5);
    return null;
}

public long getTimeStamp(){
    return System.currentTimeMillis();
}

public ArrayList<File> getFiles() {
    return files;
}

public void setFiles(ArrayList<File> files) { 
    this.files = files;
}

public int getUploadsAvailable() {
    return uploadsAvailable;
}

public void setUploadsAvailable(int uploadsAvailable) {
    this.uploadsAvailable = uploadsAvailable;
}

public boolean isAutoUpload() {
    return autoUpload;
}

public void setAutoUpload(boolean autoUpload) {
    this.autoUpload = autoUpload;
}

public boolean isUseFlash() {
    return useFlash;
}

public void setUseFlash(boolean useFlash) {
    this.useFlash = useFlash;
}

}

ファイル クラス

package com.acc.upload;

public class File {

private String Name;
private String mime;
private long length;
private byte[] data;
public byte[] getData() {
    return data;
}
public void setData(byte[] data) {
    this.data = data;
}
public String getName() {
    return Name;
}
public void setName(String name) {
    Name = name;
    int extDot = name.lastIndexOf('.');
    if(extDot > 0){
        String extension = name.substring(extDot +1);
        if("png".equals(extension)){
            mime="image/png";
        }else {
            mime = "img/unknown";
        }
    }
}
public long getLength() {
    return length;
}
public void setLength(long length) {
    this.length = length;
}

public String getMime(){
    return mime;
}
}

どうもありがとうございました。これでエラーはなくなりました。web.xml で createTemp ファイルを true に設定しましたが、ローカル システムの一時フォルダーにアップロードされたファイルが見つかりません。 web.xml ファイルの設定? この2つの問題で助けてください。

4

2 に答える 2

0

この問題は、richface 4.0.0 と spring 4 でも発生します。ファイルをアップロードすると、「リクエスト プロローグを読み取れません」というエラー メッセージが常に表示されます。

そして、この問題を次のように解決しました。マルチパートリゾルバーを、CommonsMultipartResolver の代わりに DispatcherServlet に設定します。spring の CommonsMultipartResolver が richface 4.0.0 と一致しないため

この助けを願っています!

于 2015-07-17T03:34:16.507 に答える