2015-02-04 3 views
1

Вот что я пытаюсь сделать:Как смонтировать изображение SVG с помощью JSF/OmniFaces/PrimeFaces?

  1. У меня есть @ViewScoped JSF боб с, в котором я называю сервис JAX-RS с использованием Джерси.
  2. Ресурс, который я запрашиваю, возвращает ответ с типом контента image/svg+xml.
  3. Показать его на странице Facelet.

Мои исследования до сих пор, привело меня к мысли:

  • h:graphicImage (основной JSF) не поддерживает SVG
  • p:graphicImage (PrimeFaces) не поддерживает SVG
  • o:graphicImage (OmniFaces) делает не поддерживают SVG.

Невозможно доставить изображение SVG на страницу facelets из бэкэн-бэка? Служба, которая обслуживает изображения SVG, будет позже расширена для поддержки доставки (среди других форматов) PNG, но я надеялся использовать SVG напрямую.

+0

Просьба уточнить. Покажите нам, что вы пробовали до сих пор, объясните, почему это не так, а не спрашивать «как я могу это сделать». –

ответ

4

<o:graphicImage> задает тип содержимого по умолчанию в image, но ваш браузер, видимо, не глотать, что для SVG изображений. Согласно this commit, я имею в OmniFaces 2,1 добавлена ​​поддержка SVG для <o:graphicImage dataURI="true"> и я добавил новый атрибут type, который позволяет явно указать тип изображения с помощью расширения файла:

<o:graphicImage value="#{bean.image}" type="svg" /> 

В случае бросает IllegalArgumentException как этот

java.lang.IllegalArgumentException: o: graphicImage 'type' должен представлять допустимое расширение файла. Обнаружено недопустимое значение 'svg'.

Тогда это означает, что ваш сервер не распознает его как зарегистрированное сопоставление мим. Затем вы должны добавить новое сопоставление миминга на сервер или webapp's web.xml, как показано ниже:

<mime-mapping> 
    <extension>svg</extension> 
    <mime-type>image/svg+xml</mime-type> 
</mime-mapping> 
+0

OmniFaces очень круто, очень жаль, что я не могу использовать его в портлетах. Я понимаю, что это техническое ограничение. –

+0

BalusC, спасибо! Думаю, ты надел гвоздь на голову здесь. Я буду тестировать снимок завтра и обновляю здесь. – matsa

+0

Он отлично работает! Чтобы уточнить, вот мой пример: EL выражение возвращает InputStream. – matsa

0

Я не пробовал, но можете ли вы использовать JSF's ui:include? Что-то вроде этого:

<ui:include src="assets/img/fileFromJersey.svg" /> 
+1

Насколько я понимаю, OP имеет изображение только в аромате 'byte []' или 'InputStream'. – BalusC

+0

@BalusC Да, я думаю, это не сработает, если оно не будет записано на диск. –

Смежные вопросы