2011-04-01 71 views
0

從WAS6.1 + JSF1.1 + richfaces.3.1.5遷移到WAS7 + JSF1.2 + facelets1.1.14 + richfaces3.3.3。JSF1.2消息未呈現

即使調試facescontext.getMessages()包含消息,錯誤/狀態消息也不會使用h:消息進行呈現。

在提交表單時,我正在驗證輸入。如果驗證失敗,我將添加一個錯誤消息給facescontext。它可以用於多個輸入。每個錯誤味精添加到FacesContext中

FacesMessage message = new FacesMessage(); 
    message.setDetail(msg); 
    message.setSummary(msg); 
message.setSeverity(FacesMessage.SEVERITY_ERROR); 

    getFacesContext().addMessage(componentID, message); 

,並在XHTML我使用^ h顯示它:消息

我是用JSP在WAS6.1和JSF1.1,這用來做工精細 由於

中添加更多細節

我XHTML

<ui:composition template="/template.xhtml"> 
    <ui:define name="content"> 
     <div id="content-nosidebar"> 
      <h:form id="uploadDoc1" > 
       <h:messages/> 
       <h:panelGrid id="panelGridContact" headerClass="standardPageHeader" width="100%" cellpadding="5"> 
        <f:facet name="header"> 
         <h:panelGroup> 
          <h:outputText value="Upload Contact Info" /> 
          <hr/> 
         </h:panelGroup> 
        </f:facet> 
        <h:panelGroup id="msgId"> 
         <xyz:errorMessages /> 
         <xyz:statusMessages /> 
        </h:panelGroup> 
        <h:panelGrid style="text-align: center;font-weight: bold;"> 
         <h:outputText value="Click on Browse button to identify CSV file with contact information for upload."/> 
         <h:outputText value="File size limit is 10MB."/> 
         <h:panelGroup> 
          <rich:fileUpload id="fileuploader" fileUploadListener="#{uploadContactCntrl.onSubmit}" 
           acceptedTypes="csv" allowFlash="true" listHeight="50" addControlLabel="Select File" uploadControlLabel="Submit" clearControlLabel="clear"/> 
         </h:panelGroup> 
         <h:outputText value=" "/> 
        </h:panelGrid> 
       </h:panelGrid> 
      </h:form> 
     </div> 
    </ui:define> 
</ui:composition> 

errorMessages和statusMessages是常見的標籤顯示錯誤(驗證錯誤)和狀態((如更新完成)消息

在該backingbean上如果遇到一個錯誤提交(如「文件未找到「或」數據庫已關閉「我使用來自資源文件的錯誤/狀態消息調用常用方法。 WebDtils.addCustomErrorMessage(「global.error.ContactInfo-DuplicateRecords-UserID」,new String [] {userid,Integer.toString(j + 1)},Constants.RESOURCE_BUNDLE_NAME);}} (「global.error.ContactInfo-successMessage」,new String [] {Integer.toString(noOfRowsInserted)},Constants.RESOURCE_BUNDLE_NAME);

public static void addCustomErrorMessage(String msg, String componentID) { 
    FacesMessage message = new FacesMessage(); 

    message.setDetail(msg); 
    message.setSummary(msg); 
    message.setSeverity(FacesMessage.SEVERITY_ERROR); 

    getFacesContext().addMessage(componentID, message); 
} 

public static void addCustomStatusMessage(String msg, String componentID) { 
    if (errorCodeParameters != null && errorCodeParameters.length > 0)  
     msg = MessageFormat.format(msg, (Object[])errorCodeParameters); 

    FacesMessage message = new FacesMessage(); 

    message.setDetail(msg); 
    message.setSummary(msg); 
    message.setSeverity(FacesMessage.SEVERITY_INFO); 

    getFacesContext().addMessage(componentID, message); 
} 

當輸入字段出現錯誤時,我們還使用相同的標籤來顯示錯誤消息。對於例如名字字段具有無效字符。

正如前面提到的,這是工作的罰款才遷移到JSF1.2

+0

請添加一些信息 – 2011-04-01 19:13:05

回答

0

你的回答必須XHTML代碼也一樣,任何方式我給的U樣品在JSF 1.2使用驗證...

的XHTML代碼應該是這樣..

<h:inputText id="txt_project_name" 
     value="#{FIS_Project_Master.txt_project_name_value}" 
     validator="#{FIS_Project_Master.txt_project_name_validator}"/> 

    <h:message id="msg_txt_project_name" for="txt_project_name" /> 

Java代碼應該是這樣......

public void txt_project_name_validator(FacesContext context, UIComponent component, Object value) { 
    if (bmwpProjectMstFacade.ispmProjName_exists(value.toString().toUpperCase().trim())) { 
     FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_WARN, "Warning", "Project Name Already Exist"); 
     throw new ValidatorException(message); 
    } 
} 
+0

OP確實採用了錯誤的方法來進行驗證,但它應該工作得很好,這不能解釋也不能回答真正的問題。 – BalusC 2011-04-04 12:15:45