2011-02-24 4 views
1

전환이 후속이 허용 대답의 제안을 따른 후JSF 이미지

Using <c:when> with an enumeration에 의문을 제기하는 것입니다, 나는 또 다른 문제가 발생했습니다. 실제 이미지 경로 (예제 코드)는 부분적으로 라이브러리 함수를 사용하여 테마 이미지 경로를 생성합니다. 나는 실제 코드를 공개 할 수 없으므로 여기에 게시 할 때 많은 조각을 잘라야한다는 것을 이해하십시오.

첫 번째 문제점은 h : graphicImage가 현재 포틀릿의 경로를 사용하여 img 태그에 대한 절대 이미지 경로를 자동으로 생성한다는 것입니다. 예 : http://myserver/mytheme/portlet/image.gif이 필요하지만 <h:graphicsImage value="#{myNs:getThemePath()}image.gif" />을 사용하면 http://myserver/myportlet /mytheme/portlet/image.gif;로 렌더링됩니다. 대신 <img src="#{myNs:getThemePath()}image.gif" />을 사용하면 완벽하게 작동합니다. 다른 질문에 지정된대로

, 나는 지역화와 올바른 alt 속성을 배치하는 나는 또한 (접근성 이유로) 필요 ICEFaces 테이블에 반복하는 항목의 상태, 에 내놓고 이미지 사이를 전환 할 필요가 의지.

간단히, 내 코드는 다음 (생략 ice:dataTable)

<h:column> 
    <f:facet name="header"> 
     <ice:outputText value="#{myNs:getLocale('state')}" /> 
    </f:facet> 
    <img alt="[[TODO]]" src="#{myNs:getThemePath()}#{item.state == 'COMPLETED' ? 'ok' : 'ko'}.gif" 
</h:column> 

의 src 부분의 작품과 유사하지만, 지금은 문제를 온다.

나는 alt="#myNs:getLocale('prefix.#{item.state = 'COMPLETED' ? 'completed' : 'canceled'}')} 내가 둥지 식 (은 평가되지 않습니다)

나는 두 경우 (alt 복잡한 표현식을 사용할 필요가 없습니다) 두 <h:graphicsImage 태그를 작성하는 경우와는 rendered을 사용할 수 없습니다 사용하는 경우 애트리뷰트가 다른 질문의 대답에 설명 된대로 제대로 표시되지 않으면 이미지 URL이 올바르게 렌더링되지 않습니다.

다른 질문에서 설명했듯이 항상 false로 평가되기 때문에 <c:when 태그도 사용할 수 없습니다.

두 가지 요구 사항을 모두 충족하려면 어떻게해야합니까? 두 개의 <img 태그를 사용하고 내 상태에 따라 렌더링을 전환하려면 어떻게해야합니까?

감사

표현을 결합 할 때 다행히, 나는 톰캣 로그에 다음과 같은 예외 메시지를 받았습니다 [추가]

. EL 표현을 더 잘 배울 수 있습니까? 나는 완전히 JSF를 처음 사용했다.

Caused by: org.apache.el.parser.ParseException: Encountered "#" at line 1, column 32. 
Was expecting one of: 
    <INTEGER_LITERAL> ... 
    <FLOATING_POINT_LITERAL> ... 
    <STRING_LITERAL> ... 
    "true" ... 
    "false" ... 
    "null" ... 
    "(" ... 
    "!" ... 
    "not" ... 
    "empty" ... 
    "-" ... 
    <IDENTIFIER> ... 
    <FUNCTION_CALL> ... 
+0

"이미지 URL이 올바르게 렌더링되지 않습니다." 어떻게 렌더링 할 수 있습니까? – Bozho

+0

이미 말했듯이 http : //myserver/myportlet/mytheme/portlet/image.gif URL의 myportlet 부분은 없어야합니다. 어쨌든, 마침내 img 태그를 사용하여 문제를 해결했습니다 –

답변

1

나는 10 분 안에 나 혼자서 그것을 해결 한 것처럼 보였다. 방법을 나눌 게.

결합 된 표현이 가능하지만 단순히 # {}을 (를) 다시 사용할 필요가 없습니다. !!!! 벙어리 무엇 (나는 총 초보자 해요 말 했는가?)

#{item.state = 'COMPLETED' ? myNs:getLocale('prefix.completed') myNs:getLocale('prefix.canceled')} 

조건부 일반 바닐라 HTML을 렌더링 할 수있는 능력의 콘크리트 질문에 대답하기

5

작동; rendered 속성을 지원하는 JSF 구성 요소로 랩핑하지만 그 자체로는 아무 것도 출력하지 않습니다.

<h:panelGroup rendered="#{item.state == 'COMPLETED'}"> 
    <img src="ok.gif" /> 
</h:panelGroup> 
<h:panelGroup rendered="#{item.state == 'CANCELLED'}"> 
    <img src="ko.gif" /> 
</h:panelGroup> 

Facelets를 사용할 때 <ui:fragment>을 대신 사용할 수도 있습니다. 약간의 오버 헤드가 있습니다.

+0

좋은 답변 !! 나는 다음번에 반드시 이것을 시도 할 것이다 !! –

+0

당신을 진심으로 환영합니다. – BalusC