被点击其他组件后,才ValueChangeEvents被解雇(ValueChangeEvents b

2019-10-31 08:52发布

我试图内JSF(1.1.7)和Apache特立尼达(1.0.11)使用INPUTFILE。 我定义了一个变化事件,但是当我更改文件选择,当我点击表格的其它部件不被解雇的事件,但。

以下是JSP代码:

    <trh:body>
        <tr:panelPage>
            <tr:form usesUpload="true" id="myForm"> 
                <tr:inputFile columns="80" id="archivo" 
                    valueChangeListener="#{myBean.changeInputFile}" 
                    immediate="true">
                </tr:inputFile>
                <tr:commandButton text="Begin"/>
            </tr:form>
        </tr:panelPage>
    </trh:body>

这里是bean的相关部分:

public void changeInputFile(ValueChangeEvent event) {
    UploadedFile f = (UploadedFile)event.getNewValue();
}

当我点击开始按钮(已经改变先前文件选择)代码仅进入myBean.changeInputFile方法。 我想,当我更改INPUTFILE组件选择的文件进入myBean.changeInputFile。

任何想法,为什么会是这样呢?

Answer 1:

你expextation是错误的。 该valuechangelistener是一个服务器端的操作时,东西提交给服务器,有效地具有比以前不同的值,它会火。 它是不会告诉组件的行为类似于现代的AJAX(JSF 1.1.7及其valuechangelistener早在阿贾克斯时代)。 当你,好了,在“老”的HTML条款使用表单提交类似按下提交按钮(或者使用一些JavaScript来触发,就像您在旧的纯HTML天)的形式值只提交到服务器。 而且,由于没有按下按钮或添加JavaScript中,没有被提交到服务器valuechangelistener不会自发地做一些事情。

所以,你看到的行为是完全应该的。



文章来源: ValueChangeEvents being fired only after other components are clicked