我在 ice:inputFile 组件方面遇到了一个严重问题。当上传过程中发生错误(例如:无效文件名错误、空文件名错误、超过最大大小错误)时,我使用 ice:message 标签来显示这些错误消息。我使用 ice:panelPopup 并在其中显示 ice:inputFile 组件。问题是:当我切换上传弹出窗口时,错误消息仍然出现,我需要任何方法来清除这些消息。
请帮助我,任何帮助表示赞赏............ :)
我不能 100% 确定,如果我正确理解了您的问题,但是我猜想在触发弹出窗口的操作上应用的立即关键字会对您有所帮助。
<ice:commandLink
action="#{this.popup}"
immediate="true">
<h:outputText value="foo" />
</ice:commandLink>
在常规的 JSF 生命周期中,动作事件通常在流程验证阶段之后触发。此外,值将从 UI 更新到模型。
immediate属性基本上可用于每个可导致任何类型事件的 JSF 组件,它绕过验证,并且根据事件类型,还绕过模型更新阶段。
替代文本 http://img43.imageshack.us/img43/3900/jsfimmediatecomponents.png (Geary,Horstmann,2008。核心 JavaServer Faces - 第二版。Prentice Hall)
您将在 Suns JSF 教程:立即属性中找到有关此主题的更多信息
这里有两件事对我有用。
将您的 ice:inputFile 组件绑定到支持 bean 上的属性,并在关闭弹出窗格时手动调用该属性的 reset 方法。
<ice:inputFile binding="#{Bean.uploadedFile}"/>
class BackingBean {
private UICommand uploadedFile;
public UICommand getUploadedFile() { return uploadedFile; }
public void setUploadedFile(UICommand uploadedFile) { this.uploadedFile = uploadedFile; }
public void onClose(ActionEvent event) {
((InputFile) uploadedFile).reset();
}
}
-或者-
添加一个 actionListener 到你的 ice:inputFile 组件。这将阻止 inputFile 组件将自己的验证错误添加到上下文中。您可以在 actionListener 方法中实现您需要的任何验证,并使用 ice:messages 标签显示验证错误。我发现这比依赖 inputFile 的验证效果更好,因为它使您可以完全控制错误消息文本/样式,并且当弹出窗格消失时错误消息会自动清除。
<ice:inputFile actionListener="#{Bean.onFileUpload}"/>
public class BackingBean {
public void onFileUpload(ActionEvent event) {
FileInfo info = ((InputFile) event.getSource()).getFileInfo();
switch (info.getStatus()) {
case FileInfo.SAVED :
// handle uploaded file
case FileInfo.SIZE_LIMIT_EXCEEDED :
// file too big error
...
}
}
}