Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF在文件输入ajax后没有重定向请求_Jsf_Jsf 2 - Fatal编程技术网

JSF在文件输入ajax后没有重定向请求

JSF在文件输入ajax后没有重定向请求,jsf,jsf-2,Jsf,Jsf 2,我在JSF 2.2中有一个表单: <h:form enctype="multipart/form-data"> <h:outputLabel>title *</h:outputLabel> <h:inputText value="#{bean.title}" required="" /> <h:outputLabel>Image *</h:outputLabel> <h:inputFi

我在JSF 2.2中有一个表单:

<h:form enctype="multipart/form-data">
    <h:outputLabel>title *</h:outputLabel>
    <h:inputText value="#{bean.title}" required="" />

    <h:outputLabel>Image *</h:outputLabel>
    <h:inputFile value="#{bean.picutreFile}" a:accept="image/*">
        <f:ajax listener="#{bean.uploadPicture}" />
    </h:inputFile>

    <h:commandLink action="#{bean.save}">
        Save
    </h:commandLink>
</h:form>
但是当我选择了一个图像并调用了
uploadPicture
函数后,
save
函数就不能重定向页面了。它调用
save
,但重定向不起作用,只刷新当前页面

如果我跳过文件上传,它会正常重定向。我怎样才能让它工作

编辑
我注意到,如果我删除ajax
,它将按预期工作。但我必须拥有ajax,因为我想在上传后显示图像

编辑2

我可以看到,在调用ajax之后,JSF在页面底部创建了一个奇怪的iframe,其主体中有
部分响应
标记,当我按下“Save”时,iframe被重定向到目的地。为什么呢???

我知道JSF会阻止您的请求,直到ajax调用安全性。也许您可以在ajax调用时放置一个处理条或类似的东西。所以在ajax调用完成之前,用户不能单击保存按钮


单击“上载”按钮然后单击“保存”按钮后,您能稍等一会吗?如果我是对的,它应该会起作用

我复制了它。我确实同意这种行为令人困惑且不直观,但我不会说这是JSF实现中的一个bug,因为您实际上是将ajax与常规请求混合在一起,这在一开始是错误的。另见这一相关问题

正确的方法是使命令链接也成为ajax链接

<h:commandLink action="#{bean.save}">
    Save
    <f:ajax execute="@form" />
</h:commandLink>

顺便说一句,您看到的iframe是一种在文件上传过程中模拟异步行为的古老技巧,它早在标准化之前就发明了。在JSF2.2开发期间,由于WebBrowser(特别是MSIE)具有更好的向后兼容性,这种方法比XHR2更受欢迎。另请参见a.o.

当我调试它时,在
uploadPicture
结束后按“保存”。还不够好吗?顺便说一句,我只使用5KB的照片,所以我认为不需要太多的等待时间。哪个JSF impl/版本?早期的2.2版本有h:inputFile的童年缺陷。另请参阅以获取提示。@BalusC当我在NetBeans中打开GlassFish库中的JSF的JAR时,我可以看到
包名称:Mojara JSF实现2.2.12(20150720-0848)https://svn.java.net/svn/Mojarra~svn/tags/2.2。12@14885
,我也在使用GlassFish 4.1.1,我不知道将ajax与常规混合使用是错误的,因为ajax只是用于图像的显示预览。但是有了
它就可以完美地工作了。非常感谢。
<h:commandLink action="#{bean.save}">
    Save
    <f:ajax execute="@form" />
</h:commandLink>
<h:inputFile value="#{bean.picutreFile}" a:accept="image/*" />