我遇到了严重的ice问题:inputFile组件。 当上传过程发生错误时(如:无效文件名错误,空文件名错误,超出最大大小错误),我使用ice:message标签显示这些错误消息。 我使用ice:panelPopup并在其中显示ice:inputFile组件。 问题是:当我切换上传弹出窗口时仍会出现错误信息,我需要以任何方式清除这些信息。
请帮助我,任何帮助表示赞赏.........................:)
答案 0 :(得分:1)
我不是百分百肯定,如果我正确理解了您的问题,但是我想在触发弹出窗口的操作上应用的立即关键字会对您有帮助。
<ice:commandLink
action="#{this.popup}"
immediate="true">
<h:outputText value="foo" />
</ice:commandLink>
在常规JSF生命周期中,动作事件通常在“过程验证”阶段之后触发。此外,值将从UI更新到模型。
立即属性,基本上可用于导致任何类型事件的每个JSF组件,绕过验证,并根据事件类型,还包括模型更新阶段。
alt text http://img43.imageshack.us/img43/3900/jsfimmediatecomponents.png (Geary,Horstmann,2008。核心JavaServer Faces - 第二版.Prentice Hall)
您可以在太阳JSF教程中找到有关此主题的更多信息:The immediate Attribute
答案 1 :(得分:0)
以下两件事对我有用。
将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();
}
}
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();
}
}
-OR -
向你的ice:inputFile组件添加一个actionListener。这将阻止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
...
}
}
}