仅在单击其他组件后才触发ValueChangeEvents

时间:2019-03-05 12:46:43

标签: jsf jsf-1.2 trinidad

我正在尝试在JSF(1.1.7)和Apache Trinidad(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。

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:3)

您的支出是错误的。 valuechangelistener是服务器端的操作,当将某些内容提交到服务器时会触发,并且实际上具有与以前不同的值。 告诉组件的行为类似于现代ajax(jsf 1.1.7及其valuechangelistener早于ajax时代)。仅当您以“旧” html术语使用表单提交(例如按下提交按钮)时才将表单值提交到服务器(或者像使用旧的纯HTML天一样使用某些javascript来触发表单)。而且由于没有按下按钮或添加的javascript,没有任何内容提交到服务器,因此valuechangelistener不会自发执行任何操作。

所以您看到的行为完全正确。