2011-08-09 2 views
3

원래 Weblogic Beehive에서 JSF 2.0으로 작성된 사이트를 다시 작성하는 중이고 새로운 사이트에서 생성하는 메시지를 EXACTLY과 일치하는 형식으로 처리해야하는 문제가 있습니다. 기존 사이트의 출력.h : 메시지를 무시하도록 사용자 정의 facelet을 작성하고 구성하려면 어떻게합니까?

나는 좋은 태그를 사용해 보았지만 기존 메시지 프레임 워크의 스타일과 논리는이 출력에 잘 맞지 않습니다.

JSF에는 메시지를 출력 할뿐만 아니라 그에 대한 조건부 논리를 수행하는 사용자 정의 태그를 작성할 수있는 옵션이 있습니까?

예를 들어 FacesMessages를 요약 및 세부 문자열로 생성했지만 이전 사이트의 형식은 가장 높은 요약 만 표시합니다. 예를 들어 4 개의 메시지를 추가하고 각 메시지는 동일한 요약 메시지를 가지며 서로 다른 세부 정보를 추가합니다. 심각도가 가장 높은 요약 만 표시하려고합니다.

또한 각 메시지가 아닌 상자로 표시되고 스타일이 지정된 메시지가 필요하며 일부 세부 사항에는 조건부 CSS 클래스가 있어야합니다.

+0

언급하고 태그 JSF 사양 버전을 사용하십시오 : 이것은 내가 브라우저에서 페이지에서 받고 있어요 렌더링 된 출력됩니다. 대답은 일반적으로 크게 의존합니다. – BalusC

답변

0

나는 나의 JSF 페이지 (XHTML)이 함께 결국 :

  <c:set var="messageList" value="#{facesContext.messageList}" /> 
      <c:set var="maxSev" value="#{facesContext.maximumSeverity.ordinal}" /> 
      <ui:repeat value="${messageList}" var="fm" > 
       <c:choose> 
        <c:when test="${fm.severity.ordinal eq 0}"> 
         <c:set var="summaryStyleClass" value="outcome"/> 
         <c:set var="detailStyleClass" value="outcome_details"/> 
        </c:when> 
        <c:when test="${fm.severity.ordinal eq 1}"> 
         <c:set var="summaryStyleClass" value="warning_title"/> 
         <c:set var="detailStyleClass" value="warning"/> 
        </c:when> 
        <c:when test="${fm.severity.ordinal eq 2}"> 
         <c:set var="summaryStyleClass" value="error_title"/> 
         <c:set var="detailStyleClass" value="error"/> 
        </c:when> 
        <c:when test="${fm.severity.ordinal eq 3}"> 
         <c:set var="summaryStyleClass" value="fatal"/> 
         <c:set var="detailStyleClass" value="fatal_details"/> 
        </c:when> 
       </c:choose> 
      </ui:repeat> 
      <div class="${detailStyleClass}" > 
       <div class="${summaryStyleClass}"> 
         <ui:repeat value="${messageList}" var="fm" > 
          <c:choose> 
           <c:when test="${fm.severity.ordinal eq maxSev}"> 
            ${fm.summary} 
           </c:when> 
          </c:choose> 
         </ui:repeat> 
       </div> 
        <ul> 
        <ui:repeat value="${messageList}" var="msg"> 
         <li><h:outputText value="${msg.detail}"/></li> 
        </ui:repeat> 
       </ul> 
      </div> 

내가 여기에 패턴을 깨는거야 확신하지만, 섹션이 해결할 수있는 작동하지 않는 것 summaryStyleClass 및 detailStyleClass 변수. 페이지에 대해 가장 높은 심각도의 메시지가 무엇인지에 따라 메시지의 스타일을 지정해야하기 때문에 메시지를 반복합니다.

  <div> 
       <div>Warning:</div> 
       <ul> 
         <li>Warning message.</li> 
       </ul> 
      </div> 

사항 없음 스타일 ... 미래 JSF 질문에

3

JSF 2.x를 사용하는 경우 루프에서 FacesContext#getMessageList()을 반복 할 수 있습니다. 각 항목은 FacesMessage이며 차례로 여러 게터가 있습니다.

<ui:repeat value="#{facesContext.messageList}" var="facesMessage"> 
    Severity: #{facesMessage.severity}<br /> 
    Summary: #{facesMessage.summary}<br /> 
    Detail: #{facesMessage.detail}<br /> 
    <br /> 
</ui:repeat> 

이렇게하면 메시지 주위에보다 세분화 된 HTML 마크 업을 허용합니다.

List<FacesMessage> messageList = new ArrayList<FacesMessage>(); 
Iterator<FacesMessage> messages = FacesContext.getCurrentInstance().getMessages(); 

while (messages.hasNext()) { 
    messageList.add(messages.next()); 
} 

: 당신이 FacesContext이 방법이 부족 JSF 1.x에서 여전히 경우

, 당신은 몇 가지 유틸리티 콩의 도움이나 심지어 EL 기능으로 List<FacesMessage> 먼저 FacesContext#getMessages()를 수집해야 같은 방법으로 <ui:repeat>을 사용하여보기에서이 messageList을 반복 할 수 있습니다.

+0

팁 주셔서 감사. 목록 반복은 그다지 문제가되지 않습니다. 나는 눈을 감고 그걸 할 수 있습니다 ;-) 나는 메시지가 특별한 스타일을 가지고있는 경우 조건부로 요약본을 표시하고 이스케이프 처리되지 않은 html을 표시하고 싶습니다. 나는 JSF 2.0을 사용하고있다. – bakoyaro

+0

각각 JSF'rendered' 속성과' 컴포넌트를 사용한다. 이미 말했듯이 이제 마크 업을 자유롭게 제어 할 수 있습니다. – BalusC

+0

의견을 보내 주셔서 감사합니다. 시간을내어 도와 주셔서 감사합니다. JSF를 배우고 사용하는 데 어려움을 겪고 있습니다. JSF에 대한 정보의 변종 글꼴입니다. 나를 돕기 위해 좋은 JSF 2.0 서적을 추천 해 주시겠습니까? 저는 JEE에 익숙한 이클립스를 사용하는 선임 개발자입니다. JSF 만 배우고 사용하는 데 문제가 있습니다. 고마워, bakoyaro – bakoyaro

관련 문제