我正在尝试在JSF(1.1.7)和Apache Trinidad(1.0.11)中使用输入文件。我为其定义了一个更改事件,但是当我更改文件选择时,该事件并没有被触发,但是当我单击表单的另一个组件时。
这是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。
任何想法为什么会发生这种情况?
您的外汇是错误的。ValueChangeListener是一项服务器端操作,当某物提交给服务器时会发射,并且有效地具有与以前不同的值。它是不是告诉组件像现代Ajax一样行为(JSF 1.1.7及其valuechangelistener早于Ajax时代)。表单值仅在"旧" html期限中使用表单提交按钮(或使用一些JavaScript)触发像您在旧的普通HTML天中一样触发的form form form form form form form form form form form form form form forme for for for form form forme。而且,由于如果不按按钮或添加的JavaScript,则没有提交给服务器的任何内容,valuechangelistener不会自发地做某事。
因此,您看到的行为完全是应有的。