我正在尝试在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。
知道为什么会这样吗?
答案 0 :(得分:3)
您的支出是错误的。 valuechangelistener是服务器端的操作,当将某些内容提交到服务器时会触发,并且实际上具有与以前不同的值。 不告诉组件的行为类似于现代ajax(jsf 1.1.7及其valuechangelistener早于ajax时代)。仅当您以“旧” html术语使用表单提交(例如按下提交按钮)时才将表单值提交到服务器(或者像使用旧的纯HTML天一样使用某些javascript来触发表单)。而且由于没有按下按钮或添加的javascript,没有任何内容提交到服务器,因此valuechangelistener不会自发执行任何操作。
所以您看到的行为完全正确。