File upload Primefaces多文件上传不';不显示文件也不触发handleFileUpload
我从一个星期开始搜索,但找不到解决问题的合适方法。所以我在问这里的专家 我正在尝试实现一个带有FileUpload的页面,以便在同一页面上上传并显示上传后的图像 我的问题是,如果我将ManagedBean设置为File upload Primefaces多文件上传不';不显示文件也不触发handleFileUpload,file-upload,primefaces,uirepeat,File Upload,Primefaces,Uirepeat,我从一个星期开始搜索,但找不到解决问题的合适方法。所以我在问这里的专家 我正在尝试实现一个带有FileUpload的页面,以便在同一页面上上传并显示上传后的图像 我的问题是,如果我将ManagedBean设置为@RequestScope,则不会触发handleFileUpload功能。 如果我将其设置为@ViewScope,则会触发该功能,但会显示错误“流动态资源出错” 这是我的档案: web.xml <filter> <filter-name>PrimeFaces Fi
@RequestScope
,则不会触发handleFileUpload
功能。
如果我将其设置为@ViewScope
,则会触发该功能,但会显示错误“流动态资源出错”
这是我的档案:
<filter>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
<init-param>
<param-name>thresholdSize</param-name>
<param-value>2097152</param-value>
</init-param>
<init-param>
<param-name>uploadDirectory</param-name>
<param-value>E:/uploadedImages</param-value>
</init-param>
PrimeFaces文件上载筛选器
org.primefaces.webapp.filter.FileUploadFilter
阈值大小
2097152
上传目录
E:/uploadedImages
PrimeFaces文件上载筛选器
Facesservlet
@ManagedBean
@RequestScoped
public class ImageManager implements Serializable {
private final static int MAX_UPLOADED_FILES = 5;
private final static String UPLOADED_FILES_PATH = "E:/uploadedImages";
private final Map<UUID, UploadedFile> uploadedFiles = new HashMap<>();
public List<String> getListImages() {
final List<String> result = new ArrayList<>();
for (final UUID uuid : uploadedFiles.keySet())
result.add(uuid.toString());
return result;
}
public StreamedContent getImage() {
final ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
final String imageId = (String) externalContext.getRequestMap().get("imageId");
if (imageId != null) {
final UUID imageIndex = UUID.fromString(imageId);
return new DefaultStreamedContent(new ByteArrayInputStream(uploadedFiles.get(imageIndex).getContents()), "image/jpg");
}
return null;
}
public void handleFileUpload(FileUploadEvent event) {
if (uploadedFiles.size() < MAX_UPLOADED_FILES) {
final UploadedFile uploadedFile = event.getFile();
if (uploadedFile != null) {
uploadedFiles.put(UUID.randomUUID(), uploadedFile);
}
}
}
}
@ManagedBean
@请求范围
公共类ImageManager实现可序列化{
私有最终静态int MAX_上传文件=5;
私有最终静态字符串上载的\u文件\u PATH=“E:/uploadedImages”;
private final Map uploadedFiles=new HashMap();
公共列表getListImages(){
最终列表结果=新建ArrayList();
对于(最终UUID UUID:uploadedFiles.keySet())
add(uuid.toString());
返回结果;
}
公共流内容getImage(){
final ExternalContext ExternalContext=FacesContext.getCurrentInstance().getExternalContext();
最终字符串imageId=(字符串)externalContext.getRequestMap().get(“imageId”);
if(imageId!=null){
最终UUID imageIndex=UUID.fromString(imageId);
返回新的DefaultStreamContent(新的ByteArrayInputStream(uploadedFiles.get(imageIndex.getContents()),“image/jpg”);
}
返回null;
}
公共无效handleFileUpload(FileUploadEvent事件){
if(uploadedFiles.size()
<p:fileUpload fileUploadListener="#{imageManager.handleFileUpload}"
mode="advanced"
multiple="true"
sizeLimit="2097152"
allowTypes="/(\.|\/)(gif|jpe?g|png)$/"
uploadLabel="Hochladen"
auto="false"
cancelLabel="Abbrechen"
invalidFileMessage="Die ausgewählte Datei ist kein zugelassene Bilddatei"
invalidSizeMessage="Die maximale Bildgröße ist 2MB"
label="Datei Auswählen"
update="imageList"
/>
<ui:repeat value="#{imageManager.listImages}" var="imageId" id="imageList">
<h:outputText value="#{imageId}" />
<p:graphicImage value="#{imageManager.image}">
<f:param id="imageId" name="imageId" value="#{imageId}" />
</p:graphicImage>
</ui:repeat>
@丹尼尔,祝我好运。在我把问题发布到这里之前,我已经搜索了很多天了。但是我自己解决了这个问题 如果有人有相同的问题,以下是解决方案:
@Controller
@Scope(WebApplicationContext.SCOPE_REQUEST)
public class ImageManager implements Serializable {
private final static int MAX_UPLOADED_FILES = 5;
private final static String UPLOADED_FILES_PATH = "E:/uploadedImages";
private final static Map<UUID, UploadedFile> uploadedFiles = new HashMap<>();
private final static List<String> listImages = new ArrayList<>();
private StreamedContent image;
private static StreamedContent defaultImage = null;
static {
try {
defaultImage = new DefaultStreamedContent(new FileInputStream(new File("E:\\uploadedImages\\t.jpg")), "image/jpg");
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public List<String> getListImages() {
return listImages;
}
public StreamedContent getImage() {
final ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
final String imageId = (String) externalContext.getRequestParameterMap().get("imageId");
if (imageId != null) {
final UUID imageIndex = UUID.fromString(imageId);
image = new DefaultStreamedContent(new ByteArrayInputStream(uploadedFiles.get(imageIndex).getContents()), "image/jpg");
return image;
}
return defaultImage;
}
public void handleFileUpload(FileUploadEvent event) {
if (uploadedFiles.size() < MAX_UPLOADED_FILES) {
final UploadedFile uploadedFile = event.getFile();
if (uploadedFile != null) {
final UUID uuid = UUID.randomUUID();
uploadedFiles.put(uuid, uploadedFile);
listImages.add(uuid.toString());
}
}
}
public void setImage(StreamedContent image) {
this.image = image;
}
}
@控制器
@作用域(WebApplicationContext.Scope\u请求)
公共类ImageManager实现可序列化{
私有最终静态int MAX_上传文件=5;
私有最终静态字符串上载的\u文件\u PATH=“E:/uploadedImages”;
private final static Map uploadedFiles=new HashMap();
私有最终静态列表listImages=new ArrayList();
私有流内容图像;
私有静态流内容defaultImage=null;
静止的{
试一试{
defaultImage=新的DefaultStreamContent(新文件InputStream(新文件(“E:\\UploadeImage\\t.jpg”),“image/jpg”);
}
catch(filenotfounde异常){
e、 printStackTrace();
}
}
公共列表getListImages(){
返回列表图像;
}
公共流内容getImage(){
final ExternalContext ExternalContext=FacesContext.getCurrentInstance().getExternalContext();
最终字符串imageId=(字符串)externalContext.getRequestParameterMap().get(“imageId”);
if(imageId!=null){
最终UUID imageIndex=UUID.fromString(imageId);
image=newdefaultstreamdcontent(newbytearrayinputstream(uploadedFiles.get(imageIndex.getContents()),“image/jpg”);
返回图像;
}
返回默认图像;
}
公共无效handleFileUpload(FileUploadEvent事件){
if(uploadedFiles.size()
我认为这是p:graphicImage的原因,更确切地说,是因为它的内部用户界面:重复一点google,看看这里和这里