4

我一直在尝试在 Primefaces 应用程序中渲染图像。这在手风琴面板外工作正常:

<h:graphicImage library="images" name="testi.JPG" />

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

<p:accordionPanel>
    <p:tab title="Godfather Part I">
        <h:panelGrid columns="2" cellpadding="10">
            <h:graphicImage  library="images" value="testi.JPG" />

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

<p:tab title="Godfather Part II">
        <h:panelGrid columns="2" cellpadding="10">
                    <p:graphicImage url="/resources/images/testi.jpg" />

那么有人可以告诉我如何做到这一点以及正确的方法是什么,因为有很多不同的选择,但在我的情况下没有任何效果?如何将通用图像文件夹添加到我的应用程序中,根本没有路径等?

<?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>

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

<h:graphicImage library="images" name="testi.JPG" />

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

<img src="/temp/faces/javax.faces.resource/testi.JPG?ln=images" />

在 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,

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

<td><img src="testi.JPG" /></td>
<td>The story begins as Don Vito Corleone,

使用 Primefaces 标签:

<p:tab title="Godfather Part II">
        <h:panelGrid columns="2" cellpadding="10">
                    <p:graphicImage url="/resources/images/testi.jpg" />

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

<td><img id="j_idt29:j_idt32" src="/temp/resources/images/testi.jpg" alt="" /></td>

编辑:这是有效的,但为什么?

<h:graphicImage value="#{resource['images:testi.JPG']}"/>

没有S的资源!!

谢谢!萨米人

4

1 回答 1

14

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

<h:graphicImage library="images" value="testi.JPG" />

引用资源时,必须改用name属性。

<h:graphicImage library="images" name="testi.JPG" />

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


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

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

<h:graphicImage name="images/testi.JPG" />

或者引入一个完全值得的特定于 webapp 的库,您可以在其中放置所有资源:

<h:graphicImage library="default" name="images/testi.JPG" />
于 2012-04-26T16:34:16.027 回答