只有在单击其他组件后才会触发ValueChangeEvents

问题描述 投票:0回答:1

我正在尝试在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。

任何想法为什么会发生这种情况?

jsf jsf-1.2 trinidad
1个回答
3
投票

你的预言是错误的。 valuechangelistener是一个服务器端操作,当某些内容提交到服务器并且实际上具有与之前不同的值时将触发该操作。它并没有告诉组件的行为就像现代的ajax(jsf 1.1.7及其valuechangelistener早于ajax时代)。表单值只会提交给服务器,当你在“旧的”html术语中使用表单提交时,比如按下提交按钮(或使用一些javascript触发,就像你在旧的普通html日那样)。而且由于没有按下按钮或添加的javascript,没有任何内容提交给服务器,valuechangelistener将不会自发地执行某些操作。

所以你看到的行为完全应该如此。

© www.soinside.com 2019 - 2024. All rights reserved.