2013-08-19 3 views
0
내 심 프로젝트에 다음 XHTML 코드가

후 표시되지 :풍부한 : 메시지가 A4J 이벤트

<rich:column style="text-align:right"> 
    <h:inputText id="txtPercReqAmount" maxlength="6" style="width:75px;text-align:right;" value="#{pib.reservedPercentage}"> 
     <a4j:support event="onchange" ajaxSingle="true" action="#{requestForm.onReservedPercentageChange(pib)}" reRender="txtReqAmount,txtBudget,msgPercReqAmount"/> 
    </h:inputText> 
</rich:column> 
<rich:column width="250px" style="text-align:left"> 
    <rich:message id="msgPercReqAmount" for="txtPercReqAmount" styleClass="messagesingle" errorClass="errormsg" infoClass="infomsg" warnClass="warnmsg"> 
     <f:facet name="errorMarker"><h:graphicImage url="/img/msgerror.png"/></f:facet> 
    </rich:message> 
</rich:column> 

을하고 나는 InputText]를의 "onchange를"이벤트에서 일부 유효성 검사를합니다. 유효성 검사가 실패하면 <rich:message> 열에 오류 메시지를 작성하려고합니다. 여기 내 백업 콩 이벤트의 자바 코드 :

public void onReservedPercentageChange(ProcessInstanceBudget pib) { 
    BigDecimal arg2 = pib.getReservedPercentage(); 
    BigDecimal ra; 
    try 
    { 
     if (arg2 instanceof BigDecimal) 
      ra = (BigDecimal) arg2; 
     else 
      ra = BigDecimal.ZERO; 
    } 
    catch (ClassCastException cce) 
    { 
     facesMessages.add(Severity.ERROR, "The allocation request isn't valid!"); 
     return; 
    } 

    if (ra.compareTo(BigDecimal.ZERO) < 0 || ra.compareTo(new BigDecimal(100.0)) > 0) { 
     facesMessages.add(Severity.ERROR, "Allocation percentage must be in the range between 0 and 100!"); 
     return; 
    } 

    updateBudgetAllocation(pib); 
} 

문제는 오류 메시지가 나는 FacesMessage (들) 대기열에있다 "와 같은 경고를 얻을 수 없다 (도시되지 않지만, 표시되지 않았을 수 있다는 것이다 ").
내 코드에 어떤 문제가 있는지 알 수 없습니다. 누군가 도울 수 있습니까?

+0

또는 표시되지 않은 모든 메시지를 표시하기 위해 globalOnly 특성이없는 경우에도 추가하고 아직 누락되어 있는지 확인하십시오. – noone

+0

예,''로 표시됩니다. 하지만 입력 된 메시지를 표시해야하므로''를 대신 사용하기 위해 코드를 수정하고 싶습니다. – danjg

답변

0

메시지를 전역 오류로 추가했지만 메시지를 표시 할 요소가 없습니다.

원하는 것은 전역 오류 메시지로 추가하는 것이 아니라 오류의 원인이 된 입력 구성 요소에 첨부하는 것입니다.

당신은 이런 식으로 작업을 수행 할 수 있습니다

FacesContext.getCurrentInstance().addMessage(clientId, 
      new FacesMessage(FacesMessage.SEVERITY_ERROR, errorMessage, errorMessage)); 

여기서 중요한 부분은 UIComponent의 주어진 된 ClientID입니다. 이 구성 요소가 있으면 (예 : 바인딩을 통해) UIComponent.getClientId()를 통해 가져올 수 있습니다. (Retrieving other component's client ID in JSF 2.0 참조).

구성 요소에 대한 참조가없는 경우, 전체 구성 요소 트리를 분석하고 Facelet 파일 (.js)에서 id = "..."로 제공 한 ID를 통해 검색 할 수 있습니다. xhtml). (An efficient way to compute a UIComponent clientID? 참조)