如何在JSF + Primefaces 3.2中渲染图像

Sam*_*ami 4 jsf rendering image primefaces

我一直在尝试在Primefaces-application中渲染图像.这在手风琴小组之外工作正常:

<h:graphicImage library="images" name="testi.JPG" />
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在手风琴面板中使用它时,它不再起作用了:

<p:accordionPanel>
    <p:tab title="Godfather Part I">
        <h:panelGrid columns="2" cellpadding="10">
            <h:graphicImage  library="images" value="testi.JPG" />
Run Code Online (Sandbox Code Playgroud)

Primefaces中有一个图像标签,但根本没有库标签,所以我也试过了:

<p:tab title="Godfather Part II">
        <h:panelGrid columns="2" cellpadding="10">
                    <p:graphicImage url="/resources/images/testi.jpg" />
Run Code Online (Sandbox Code Playgroud)

那么有人可以告诉我该怎么做以及这样做的正确方法是什么,因为有很多不同的选择,但在我的情况下什么都没有?如何将通用图像文件夹添加到我的应用程序中,哪里没有路径?

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><link type="text/css" rel="stylesheet" href="/temp/faces/javax.faces.resource/theme.css?ln=primefaces-flick" /><link type="text/css" rel="stylesheet" href="/temp/faces/javax.faces.resource/primefaces.css?ln=primefaces&amp;v=3.2" /><link type="text/css" rel="stylesheet" href="/temp/faces/javax.faces.resource/layout/layout.css?ln=primefaces&amp;v=3.2" /><script type="text/javascript" src="/temp/faces/javax.faces.resource/jquery/jquery.js?ln=primefaces&amp;v=3.2"></script><script type="text/javascript" src="/temp/faces/javax.faces.resource/primefaces.js?ln=primefaces&amp;v=3.2"></script><script type="text/javascript" src="/temp/faces/javax.faces.resource/layout/layout.js?ln=primefaces&amp;v=3.2"></script>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>Primefaces Template</title></head><body>
Run Code Online (Sandbox Code Playgroud)

查看源代码:这是在手风琴面板之外,它正在工作:

<h:graphicImage library="images" name="testi.JPG" />
Run Code Online (Sandbox Code Playgroud)

-------------------> HTML:

<img src="/temp/faces/javax.faces.resource/testi.JPG?ln=images" />
Run Code Online (Sandbox Code Playgroud)

在Accordion面板中,使用在面板外部工作的相同代码行:

<p:tab title="Godfather Part I">
        <h:panelGrid columns="2" cellpadding="10">
            <h:graphicImage  library="images" value="testi.JPG" />
            <h:outputText value="The story begins as Don Vito Corleone,
Run Code Online (Sandbox Code Playgroud)

------------------> HTML:

<td><img src="testi.JPG" /></td>
<td>The story begins as Don Vito Corleone,
Run Code Online (Sandbox Code Playgroud)

使用Primefaces标签:

<p:tab title="Godfather Part II">
        <h:panelGrid columns="2" cellpadding="10">
                    <p:graphicImage url="/resources/images/testi.jpg" />
Run Code Online (Sandbox Code Playgroud)

-----------------> HTML:

<td><img id="j_idt29:j_idt32" src="/temp/resources/images/testi.jpg" alt="" /></td>
Run Code Online (Sandbox Code Playgroud)

编辑:这是工作,但为什么?

<h:graphicImage value="#{resource['images:testi.JPG']}"/>
Run Code Online (Sandbox Code Playgroud)

没有S的资源!!

谢谢!萨米

Bal*_*usC 14

你的错误是你使用value属性而不是name属性:

<h:graphicImage library="images" value="testi.JPG" />
Run Code Online (Sandbox Code Playgroud)

引用资源时,必须使用name属性.

<h:graphicImage library="images" name="testi.JPG" />
Run Code Online (Sandbox Code Playgroud)

value属性即指向URL,而不指向资源名称.


具体问题无关,您并不完全了解如何library正确使用属性.它不是要将图像,CSS和JS文件彼此分开.在那里,你已经拥有的唯一标记名<h:graphicImage>,<h:outputStylesheet><h:outputScript>为标签.该library属性应该用于模块化Web应用程序,其中image/CSS/JS文件存储在外部JAR文件中.该library属性允许您对它们进行版本控制并通过主Web应用程序覆盖它们.另请参见什么是JSF资源库以及如何使用它?

修复您<h:graphicImage>删除错误的library属性用法:

<h:graphicImage name="images/testi.JPG" />
Run Code Online (Sandbox Code Playgroud)

或者介绍一个完整的webapp特定库,您可以将所有资源放入:

<h:graphicImage library="default" name="images/testi.JPG" />
Run Code Online (Sandbox Code Playgroud)