2013-05-27 45 views
0

在RichFaces中,为了上传我使用的文件rich:fileUpload。通过使用rich:fileUpload添加,上传和全部清除按钮会自动在richfaces livedemo示例中生成,但对于我来说,添加,上传和全部清除在我的浏览器中显示为文本,我应该在哪里更改以便添加,上载和clearAll可以点击。我必须更改web.xml/pom.xml文件中的任何设置。使用RichFaces上传文件

我使用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 example”中提供的示例所示。能够帮助我解决这个问题的任何人

这是我的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; 
} 
} 

感谢lot.Now的错误是走了我。 我在web.xml中将createTemp文件设置为true,但是我无法在本地系统的temp文件夹中找到上传的文件。还有可能通过更改上传的文件到本地系统中的所需位置web.xml文件中的任何设置? 请帮助解决这两个问题。

+0

什么Richfaces版本/ JSF版本和你的web.xml在哪里? – kolossus

+0

你可以发布你的视图代码(rich:fileUpload)和你的bean代码吗? –

回答

0

关于你的按钮图标的问题,我敢肯定,你不管理自己皮肤的RichFaces的,所以你可以从你的web.xml删除此:

<context-param> 
    <param-name>org.richfaces.skin</param-name> 
    <param-value>#{skinBean.skin}</param-value> 
</context-param> 

的RichFaces现在将使用默认皮肤选项。

根据您的评论,您在哪里缺少h:头是强制性的,以便为RichFaces包含必要的资源CSS和JavaScript。

而且,你的最后一个问题是有关您的进口是坏的:

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

应更换为:

import org.richfaces.event.FileUploadEvent; 
import org.richfaces.model.UploadedFile; 

其他信息:

你的例子根据是从RichFaces 3.3.3(这是显示在页脚)。以this为例,查看您的查看代码RichFaces 4.3.2

+0

@Padmini你应该用这些信息更新你的问题。 –

+0

@Padmini更新了答案,现在应该可以工作,我已经用您的代码进行了测试,并且只更改了导入以使其正常工作。 –

+0

@Padmini所以文件上传? –

0

我也用richface 4.0.0和spring 4得到这个问题。当上传文件时,我总是得到这个错误消息“请求序言不能被读取”。

我解决了这个问题:设置多部分resolever为 而不是CommonsMultipartResolver 为DispatcherServlet。因为春天的CommonsMultipartResolver与richface不一致4.0.0

希望得到这个帮助!