如何使用JSF/OmniFaces/PrimeFaces嵌入SVG图像?
以下是我想做的:如何使用JSF/OmniFaces/PrimeFaces嵌入SVG图像?,jsf,jsf-2.2,omnifaces,Jsf,Jsf 2.2,Omnifaces,以下是我想做的: 我有一个@ViewScopedJSF bean,在其中我使用Jersey调用一个JAX-RS服务 我请求的资源返回内容类型为image/svg+xml的响应 在Facelet页面中显示它 到目前为止,我的研究使我相信: h:graphicImage(核心JSF)不支持SVG p:graphicImage(PrimeFaces)不支持SVG o:graphicImage(OmniFaces)也不支持SVG 没有办法从支持bean向facelets页面交付SVG图像吗?稍后将扩
@ViewScoped
JSF bean,在其中我使用Jersey调用一个JAX-RS服务image/svg+xml
的响应
(核心JSF)不支持SVGh:graphicImage
(PrimeFaces)不支持SVGp:graphicImage
(OmniFaces)也不支持SVGo:graphicImage
没有办法从支持bean向facelets页面交付SVG图像吗?稍后将扩展服务SVG图像的服务,以支持交付(以及其他格式)PNG,但我希望直接使用SVG。我没有尝试过,但您能使用JSF的
ui:include
?大概是这样的:
<ui:include src="assets/img/fileFromJersey.svg" />
设置了默认的内容类型图像
,但是您的浏览器显然没有接受SVG图像的默认内容类型。根据,我为OmniFaces 2.1添加了对
的SVG支持,并添加了一个新的type
属性,该属性允许您通过文件扩展名显式指定图像类型:
<o:graphicImage value="#{bean.image}" type="svg" />
请具体说明。向我们展示您迄今为止所做的尝试,解释为什么它没有做正确的事情,而不是问“我该怎么做”。据我所知,OP的图像只有
byte[]
或InputStream
@BalusC的味道。是的,我想如果不将其写入磁盘,这将不起作用。OmniFaces非常酷,可惜我不能在portlet中使用它。我知道这是技术上的限制。巴卢斯克,谢谢!我认为你在这里一针见血。我明天会测试快照,然后在这里更新。它工作得很好!为了澄清,这里是我的测试示例:EL表达式返回InputStream。不客气。只有dataURI=“true”
在这个构造中是不必要的(相对昂贵)。如果您仍然坚持使用dataURI=“true”
,那么就不必使用type=“svg”
。从您的文档中可以看出:“当不呈现为数据URI时,InputStream或byte[]属性必须指向无状态@ApplicationScoped bean(支持JSF和CDI作用域)。”这就是我启用它的原因。
<mime-mapping>
<extension>svg</extension>
<mime-type>image/svg+xml</mime-type>
</mime-mapping>