Jsf 调用primefaces文件侦听器之前预处理文件名

Jsf 调用primefaces文件侦听器之前预处理文件名,jsf,file-upload,primefaces,Jsf,File Upload,Primefaces,Wildfly 8、Jsf2.2、Primefaces 5.3 在到达Primefaces侦听器之前,我想进行一些文件名转换。因此,侦听器中的上载文件已转换为文件名。我的第一个想法是使用WebFilter,但显然不太好。答案中给出了原因 因为我们使用的是ApacheCommons,所以我对它进行了修改。覆盖 DiskFileItemFactory,并返回调整后的文件名 public class MyFactory extends DiskFileItemFactory{ public F

Wildfly 8、Jsf2.2、Primefaces 5.3

在到达Primefaces
侦听器之前,我想进行一些文件名转换。因此,侦听器中的上载文件已转换为文件名。我的第一个想法是使用
WebFilter
,但显然不太好。答案中给出了原因

因为我们使用的是ApacheCommons,所以我对它进行了修改。覆盖 DiskFileItemFactory,并返回调整后的文件名

public class MyFactory extends DiskFileItemFactory{
    public FileItem createItem(String fieldName, String contentType,
            boolean isFormField, String fileName) {
        fileName = convertFileName(fileName);
        return  super.createItem(fieldName, contentType, isFormField, fileName);
    }
此外,还会覆盖Primefaces FileUploadFilter以实例化新工厂

对于本机Jsf2.2上传,是否可能出现类似的情况


编辑:这个想法的原因是:从文件名中删除一些不好的unicode字符。所以在侦听器中,方法始终保持正确的字符。根据文件和问题动态确定保存文件的位置。因此,我不确定如何为此创建复合组件。

为什么不在真正存储它之前在uploadListener中更改它?这看起来像是一个奇怪的黑客针对另一个潜在问题的问题。当然,这是可能的,但你们可以忘记去做。而且已经有很多实现的上传侦听器。对于apache hack来说,这是唯一的配置问题。你说“可以忘记做”是什么意思?如果一个文件应该有一个特定的名称是业务需求,那么在业务方法
saveFile(…)
中实现它,而不是在webfilter或类似的hack中实现它。没有人能忘记它,因为它是在商业方法中。你是说你宁愿有一个黑客而不是好的代码?我的选择不好。。。咬苹果,修复UploadListener(它们现在可以工作了,是吗?)听起来像是一个复合组件的完美候选,它有一个支持组件,完成所有的“隐藏”工作,并提供一个已经重命名并保存为bean属性值的文件。Unicode字符只会对您的业务逻辑有害,对吗?最好马上执行修复/清理。