2011-09-08 63 views
2

我正在使用RichFaces 4.我的問題是消息根本沒有出現。如果我使用rich:消息,消息會短暫顯示然後消失。RichFaces fileupload和h:消息問題

這是控制器:

public void uploadListener(final FileUploadEvent event) throws IOException 
{ 
    final UploadedFile item = event.getUploadedFile(); 

    final FacesContext context = FacesContext.getCurrentInstance(); 
    final Application application = context.getApplication(); 
    final String messageBundleName = application.getMessageBundle(); 
    final Locale locale = context.getViewRoot().getLocale(); 
    final ResourceBundle resourceBundle = ResourceBundle.getBundle(messageBundleName, locale); 

    final String msg = resourceBundle.getString("upload.failed"); 
    final String detailMsgPattern = resourceBundle.getString("upload.failed_detail"); 

    try 
    { 
     CSVImporter.doImport(item.getInputStream(), registry, item.getName()); 
    } 
    catch (ParseException e) 
    { 
     final Object[] params = {item.getName(), e.getMessage()}; 
     final String detailMsg = MessageFormat.format(detailMsgPattern, params); 
     final FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, detailMsg); 

     context.addMessage("uploadForm:uploader", facesMsg); 
    } 
    catch (TokenMgrError e) 
    { 
     final Object[] params = {item.getName(), e.getMessage()}; 
     final String detailMsg = MessageFormat.format(detailMsgPattern, params); 
     final FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, detailMsg); 

     context.addMessage("uploadForm:uploader", facesMsg); 
    } 
} 

而這是視圖:

<h:form id="uploadForm" enctype="multipart/form-data"> 
    <h:message id="message" showDetail="true" for="uploader" errorClass="error" warnClass="warning" infoClass="info" fatalClass="fatal"/> 
    <rich:fileUpload id="uploader" 
      fileUploadListener="#{itemController.uploadListener}" 
       maxFilesQuantity="1" 
       acceptedTypes="csv"> 
     <a4j:ajax event="uploadcomplete" execute="@none" render="items, message" /> 
    </rich:fileUpload> 
</h:form> 

在兩種情況下螢火蟲報告被髮送一個空消息字段。

<?xml version='1.0' encoding='UTF-8'?> 
<partial-response><changes><update id="uploadForm:message"><![CDATA[<span id="uploadForm:message"></span>]]></update><update id="j_idt16:items"><![CDATA[<table id="j_idt16:items"> 
<thead> 
<tr> 
<th scope="col"> 
         Titles 
        </th> 
</tr> 
</thead> 
<tbody> 
<tr><td></td></tr></tbody> 
</table> 
]]></update><update id="javax.faces.ViewState"><![CDATA[8859542538952100446:6041172679113548382]]></update></changes></partial-response> 

回答

7

問題是a4j:ajax標記。它發送第二個請求,並且消息被清除。這工作:

<h:form id="uploadForm" enctype="multipart/form-data"> 
    <h:message id="message" showDetail="true" for="uploader" errorClass="error" warnClass="warning" infoClass="info" fatalClass="fatal"/> 
    <rich:fileUpload id="uploader" 
      fileUploadListener="#{itemController.uploadListener}" 
      maxFilesQuantity="1" 
      acceptedTypes="csv" 
      render="items, message" /> 
</h:form>