Getting started with SVG graphics objects in JSF 2.0 pages

前端 未结 2 549
迷失自我
迷失自我 2021-01-01 01:40

What I want to do is create web pages with interactive SVG content. I had this working as a Java desktop application using Batik to render my SVG and collect UI events like

相关标签:
2条回答
  • 2021-01-01 02:01

    You could try some kind of mix between ItsNat and JSF, for instance using an iframe to contain ItsNat generated markup containing SVG. ItsNat provides many options to integrate SVG in web applications, pure SVG or SVG inline in HTML, including SVG events and Batik (by the way SVG events in Batik applet are going to be fixed in ItsNat 1.1).

    Idea: use a session attribute to share a bridge object between JSF and ItsNat

    0 讨论(0)
  • 2021-01-01 02:05

    How to get the image to render in the first place?

    The <h:graphicImage> just renders a HTML <img> element. This doesn't work for SVG objects in current browsers. You need <object type="image/svg+xml">. Since JSF 1.2, there's no need for the <f:verbatim> ugliness. On Facelets you can just inline EL in plain HTML like so:

    <object type="image/svg+xml" data="#{bean.svgUrl}">
    

    The standard JSF implementation however doesn't offer an UI component which renders an <object>, so you have got to do it the plain vanilla HTML way. I've checked at PrimeFaces, OpenFaces and RichFaces, but no one offer a component yet which is targeted on embedding SVG objects. PrimeFaces has a <p:media> and RichFaces an <a4j:mediaOutput> for movie objects, but that's it.


    How to get the DOM events from the SVG portion of the page back to the backing beans?

    Your best bet is to write some JavaScript which delegates to a hidden JSF ajax form. Write the necessary data to the hidden fields and trigger the <f:ajax> change or action. You can find a similar example in this answer.

    0 讨论(0)
提交回复
热议问题