如何覆盖 ICEfaces 中的默认文件上传 h:message
Posted
技术标签:
【中文标题】如何覆盖 ICEfaces 中的默认文件上传 h:message【英文标题】:How to override default file upload h:message in ICEfaces 【发布时间】:2012-01-02 06:52:21 【问题描述】:我正在使用 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>
【问题讨论】:
【参考方案1】: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);
【讨论】:
【参考方案2】:您必须创建自己的消息并发送。它将覆盖默认消息。这是一种奇怪的行为,但它会起作用。
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
【讨论】:
如果我在这里使用 FileEntryCallBack 实例怎么办:wiki.icefaces.org/display/ICE/… 并且我想在结尾消息中添加摘要消息? 我们还没用过那个,所以我不知道。 啊,在这里的完整教程中找到了它:wiki.icefaces.org/display/ICE/… 好吧,有一个案例,我在按钮旁边显示了新消息,它一直显示旧的默认消息,但不在表单中!!!! IIRC 我们使用的是 ice:form 和 ice:messages,但我不确定这是否会有所不同。【参考方案3】:您可以覆盖 icefaces 消息。
默认消息包(只是为了知道要覆盖哪个消息)可以在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 和 可见 中定义了 application.properties:
<application>
<message-bundle>application</message-bundle>
<locale-config>
<default-locale>en</default-locale>
</locale-config>
</application>
这可以通过所有 Icefaces 默认消息来完成...
【讨论】:
以上是关于如何覆盖 ICEfaces 中的默认文件上传 h:message的主要内容,如果未能解决你的问题,请参考以下文章
使用 liferay 和 icefaces 共享 Portlet 数据