【问题标题】:Ajax listener not working with inputFileAjax 侦听器不使用 inputFile
【发布时间】:2014-11-20 13:34:00
【问题描述】:

首先,我在 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 event) 并将侦听器更改为 listener="#{submitFormBean.uploadTest}" [没有 ()]
  • 我玩过各种 event="..."execute="..."(没想到它会解决我的问题,但是,好吧,我必须尝试)

代码如下:

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");
    }
}

提前致谢!

【问题讨论】:

    标签: ajax jsf file-upload


    【解决方案1】:

    我正要在 jQuery 中做我需要做的事情,但首先我决定尝试以下方法,它解决了我的问题:

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

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

    【讨论】:

      【解决方案2】:

      使用 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

      【讨论】:

      • OP 正在使用 JSF 2.2 &lt;h:inputFile&gt;,它使用 Servlet 3.0 本机文件上传支持。
      • 没错。顺便说一句,第一个链接是当我第一次阅读有关查找嵌套表单的信息时。但是,我的印象是我的问题可能与一些我不知道的配置/库有关,并且可能在主项目中丢失。不过,也许这没有任何意义,但这只是一个猜测。无论如何,感谢您的宝贵时间!
      猜你喜欢
      • 1970-01-01
      • 2017-09-24
      • 1970-01-01
      • 2017-09-27
      • 2013-12-20
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      • 1970-01-01
      相关资源
      最近更新 更多