如何在ICEfaces中覆盖默认文件上传h:消息

时间:2011-11-20 09:11:06

标签: jsf jsf-2 icefaces icefaces-2

我使用ace:fileEntry组件上传文件 成功上传后,我收到以下消息:

'File Entry' uploaded successfully 'filename'.

我希望覆盖此消息并显示其他消息(某种解析上传文件的摘要),任何想法如何?

这是我的代码:

<h:form>
        <ace:fileEntry id="fileEntryComp"
               label="File Entry"
               relativePath="uploaded"
               fileEntryListener="#{mybean.uploadFile}"/> 



        <h:commandButton value="Upload Excel File" />
        <h:message for="fileEntryComp" />         

    </h:form>

3 个答案:

答案 0 :(得分:5)

fileEntry.getResults()。getFiles()为您提供了FileInfo对象的ArrayList。 如果只上传一个文件,则可以通过以下方式获取FileInfo:

FileInfo fileInfo = fileEntry.getResults().getFiles().get(0);

您应该通过以下方式调用FileInfo的updateStatus方法来覆盖默认消息:

fileInfo.updateStatus(new FileEntryStatus() {
    @Override
    public boolean isSuccess() {
        return true;
    }
    @Override
    public FacesMessage getFacesMessage(FacesContext facesContext,
            UIComponent fileEntry, FileEntryResults.FileInfo fi) {
        return new FacesMessage(FacesMessage.SEVERITY_INFO,
                "My success message: " + fi.getFileName(),
                "My success message: " + fi.getFileName());
    }
}, true, true);

答案 1 :(得分:3)

您必须创建自己的消息并发送。它将覆盖默认消息。这是一种奇怪的行为,但它会起作用。

public void uploadFile(FileEntryEvent e) {
  FileEntry fe = (FileEntry)e.getComponent();

  FacesContext ctx = FacesContext.getCurrentInstance();
  FacesMessage msg = new FacesMessage();
  msg.setServity(FacesMessage.SERVITY_INFO);
  msg.setSummary("mysummary");
  msg.setDetail("mydetail");
  ctx.addMessage(fe.getClientId(),msg);
}

您可以查看展示广告:http://comp-suite.icefaces.org/comp-suite/showcase.jsf?grp=aceMenu&exp=fileEntry

答案 2 :(得分:2)

您可以覆盖icefaces消息。

默认消息包(只是知道哪个消息到ovverride)可以在icefaces源包中找到:

     icefaces3/ace/component/src/org/icefaces/ace/resources/messages.properties

其中:

     org.icefaces.ace.component.fileEntry.SUCCESS          = ''{0}'' has successfully uploaded ''{1}''
     org.icefaces.ace.component.fileEntry.SUCCESS_detail   = ''{0}'' has successfully uploaded ''{1}''

这些是我放在application.properties文件中的行:

    org.icefaces.ace.component.fileEntry.SUCCESS          = File ''{1}'' caricato correttamente
    org.icefaces.ace.component.fileEntry.SUCCESS_detail   = File ''{1}'' caricato correttamente

确保应用程序在faces-config.xml和 visible 中定义application.properties:

<application>
    <message-bundle>application</message-bundle>
    <locale-config>
        <default-locale>en</default-locale>
    </locale-config>
</application>

这可以通过所有Icefaces默认消息来完成......