Ajax监听器不使用inputFile

时间:2014-09-25 17:11:39

标签: ajax jsf file-upload

首先,我在NetBeans 8.0中使用JSF 2.2.7和GlassFish 4 第二,对不起,如果我留下任何有用的信息。这是我在这里的第一个问题,所以我可能会忘记一些事情。另外,英语不是我的第一语言。对不起打字错误/语法。

所以,这就是我的问题:我用h:inputFile上传文件,我需要一个ajax监听器。
在注意到它没有像我预期的那样工作之后,我决定用一个打印" Test"进行一些测试,但它从未用h:inputFile解雇。我用h:commandButton和h:commandLink试过,它们都工作正常 为了进一步测试,我使用相同的测试代码创建了一个新项目,一切正常,包括h:inputFile中的监听器。

我想知道的是为什么它在我的主项目中不起作用以及为什么它在测试项目中起作用。我在这里错过了什么?我怎样才能让它在我的主项目中发挥作用?

以下是一些(但不是全部,因为我失去了轨道)我在寻找答案后到目前为止尝试/检查过的事情:

  • 没有嵌套表格。所述xhtml在ui:composition中,但即使考虑到这一点,也没有嵌套表单。
  • 其表单包含 enctype =" multipart / form-data"
  • 我尝试将方法更改为 uploadTest(AjaxBehaviorEvent事件),并将侦听器更改为 listener ="#{submitFormBean.uploadTest}" [没有()]
  • 我玩了各种事件=&#34; ...&#34; 执行=&#34; ...&#34; < / em>(没想到它会解决我的问题,但是,我必须尝试)

代码如下:

XHTML

<h:form>
    <h:commandButton id="btnTest">
        <f:ajax listener="#{submitFormBean.uploadTest()}"/>` --> works in both projects`
    </h:commandButton>
</h:form>
<h:form>
    <h:commandLink id="lnkTest" value="Test">
        <f:ajax listener="#{submitFormBean.uploadTest()}"/>` --> works in both projects`
    </h:commandLink>
</h:form>
<h:form enctype="multipart/form-data">
    <h:inputFile id="fileTest">            
        <f:ajax listener="#{submitFormBean.uploadTest()}"/>` --> works only in test project`
    </h:inputFile>
</h:form>

@ViewScoped
@ManagedBean(name = "submitFormBean")
public class SubmitFormBean{

    public SubmitFormBean() {
    }

    public void uploadTest(){
        System.out.println("Test");
    }
}

提前致谢!

2 个答案:

答案 0 :(得分:0)

我即将在jQuery中做我需要的东西,但首先我决定尝试以下内容并解决了我的问题:

右键单击项目/属性/库
编译选项卡中,我删除并读取了JSF 2.2.7 .jar

它已经存在,但由于某种原因无效。我仍然不知道出了什么问题,但它现在正在运作。

答案 1 :(得分:-1)

使用JSF表单中的multipart / form-data,您必须执行其他配置才能使其正常工作。

您可以参考其他问题: commandButton/commandLink/ajax action/listener method not invoked or input value not updated

JSF 2.0 File upload

How to use PrimeFaces p:fileUpload? Listener method is never invoked or UploadedFile is null