我经常使用图像属性更改按钮的图像,但有人告诉我,使用.css这是一个很好的做法我试过但我不能,我做错了什么?这就是我做的:
1 - 我的项目资源存储如下:

2 - 这就是我创建style.css以访问图像的方式
.c2 {
background: url(/resources/images/smiley.jpg);
}
Run Code Online (Sandbox Code Playgroud)
3 - 这是我从我的页面正文访问css的方式(我确定这是正确的,因为同一文档中的其他类适用于此页面中的其他标记)
<h:outputStylesheet library="css" name="style.css" />
Run Code Online (Sandbox Code Playgroud)
4 - 这是创建使用适当的css类的示例commandButton的方法
<h:commandButton styleClass="c2"/>
Run Code Online (Sandbox Code Playgroud)
我认为问题出现在.css中,我尝试了几种组合但没有效果:
background-image: url(/resources/images/smiley.jpg);
background: url(resources/images/smiley.jpg);
background: url(smiley.jpg);
background: url(../smiley.jpg);
Run Code Online (Sandbox Code Playgroud)
哪里出错了?
更新 我设法通过以下代码使其工作:
.c2 {
background: url("#{resource['images:smiley.jpg']}");
}
Run Code Online (Sandbox Code Playgroud)
注意我使用css(右)和使用图像属性时的差异(左)

我怎么能解决这个问题,以便显示保持图像?
我有一个JSF2应用程序运行和工作没有问题.我与JSF的问题在于资源包.所有资源都.xhtml附加了后缀.因此main.css成为main.css.xhtml在浏览器中加载时.我想拥有它所以.xhtml不会依赖资源(不要介意页面本身).
是否有一个地方,我们可以一个方式不具有.xhtml附加的资源呢?
理想情况下,我不必改变网站的内部运作.我在下面列出了一些想法,但我不得不说我不喜欢这些.希望在某个地方找到解决方案?
我在Glassfish 3.1.2.2上使用Majorra v.2.1.17.
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/javax.faces.resource/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
<link type="text/css" rel="stylesheet" href="/javax.faces.resource/main03.css.xhtml?ln=styles">成为:<link type="text/css" rel="stylesheet" href="/javax.faces.resource/main03.css?ln=styles"> WITHOUT的.xhtml扩展.当然你可能会问我为什么需要这个.好吧,我们正在推动我们的应用程序由Akamai CDN提供服务.
我们对网站集成的问题是我们正在尝试在边缘服务器上缓存静态内容.这是通过匹配文件扩展名(即:.js,.doc,.png,css等)来完成的.我们无法匹配,xhtml因为这将缓存所有页面以及静态内容.这会导致会话等问题.
根据BalusC的回答,我按照建议实现了资源处理程序.我不会在这里重写代码,因为它在下面回答.
但是,我在加载复合组件时遇到错误.我这样得到一个错误:
WARNING: StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception
java.lang.NullPointerException
at com.sun.faces.application.ApplicationImpl.createComponent(ApplicationImpl.java:975) …Run Code Online (Sandbox Code Playgroud) 根据JSF 2.0规范,有三种方法可以使用h:graphicImage,具体取决于JSF生成HTML标记的"src"属性的方式:
<h:graphicImage value="#{resource['images:next.gif']}"/>
<h:graphicImage library="images" name="next.gif"/>
<h:graphicImage url="/resources/images/next.gif"/>
Run Code Online (Sandbox Code Playgroud)
规范声明前两个应该呈现完全相同的标记.在我的JSF实现(MyFaces 2.0.2)中,这里是生成的输出HTML:
<img src="/AppName/faces/javax.faces.resource/next.gif?ln=images">
<img src="/AppName/faces/javax.faces.resource/next.gif?ln=images">
<img src="/AppName/resources/images/next.gif">
Run Code Online (Sandbox Code Playgroud)
所以,如果我使用(名称,库)或(值)属性,那么图像总是会被JSF的servlet流式传输到客户端.如果我使用(url)属性,我可以直接链接到没有servlet干预的资源.
对我来说,第二种方法 - 直接服务器URL到资源,更快.
在什么情况下使用第一种方法 - 指定(名称,库)或(值)属性?
我有一个关于面部导航的问题.
所以我有一个页面,它接受一个请求参数来加载特定用户.此页面显示commandLink列表,单击该列表时,使用隐式导航重定向到另一个页面.通过调用"preRenderView"中的方法来加载用户.
我们重定向到的页面还会获取一个请求参数来确定要加载的大小写.该页面还使用了preRenderView.
两个页面都有视图作用域的bean.
对于按下的FIRST链接,这一切都很棒.第一页重定向到新URL,案例按预期加载.
但是,如果我单击浏览器的后退按钮然后单击另一个链接页面不会重定向.它刷新(相反),显然不会购买案例.
刷新后,我可以单击一个链接,它将正确重定向.
现在,当第一页的bean保留在会话中时,所有这些都完全正常,但我不想滥用会话状态,我认为不应该将这些数据保存在会话中.
我知道我可以通过在单击后退按钮时自动重新加载页面来修复此问题(因为视图将被重新创建),但我不确定这是否也是正确的解决方案.(我也不确定如何强迫这个)
有没有人有什么建议?这似乎是一个相当常见的用例,但我真的找不到任何例子.
谢谢!
在我当前的JSF项目的外部样式表中,有外部资源的硬编码链接
.someId { background-image:url(/context/resources/images/example.jpg); }
Run Code Online (Sandbox Code Playgroud)
在JSF xhtml文档中,我可以使用像$ {request.contextPath}这样的EL表达式,但是如何将EL处理应用于CSS文件?
(相关:如何在JSF中嵌入CSS背景图像链接?)
上下文路径的硬编码有一个缺点:/contextWeb应用程序的上下文路径(在示例中)可以在部署时通过修改web.xml来更改(或者如果在Web中未指定上下文,则通过重命名Web应用程序归档文件.xml),但链接到CSS文件中的资源仍然指向未更改的硬编码上下文,并导致资源未找到错误.
我在这里遇到了麻烦.我有一个JSF应用程序,它有一个名为baseTemplate.xhtml的模板文件.该文件位于/ resources/template文件夹中.遵循文件代码:
<?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"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<h:outputStylesheet library="css" name="default.css"/>
<h:outputStylesheet library="css" name="cssLayout.css"/>
<h:outputStylesheet library="css" name="menu.css"/>
<h:outputStylesheet library="css" name="rodape.css"/>
<title>JSF Project</title>
</h:head>
<h:body>
<div id="estrutura">
<div class="top">
<ui:insert name="top">
<ui:include src="somefile"/>
</ui:insert>
</div>
<div id="menu">
<ui:insert name="menu">
<ui:include src="somefile"/>
</ui:insert>
</div>
<div>
<div id="left">
<ui:insert name="left">
</ui:insert>
</div>
<div id="content" class="left_content">
<ui:insert name="content"></ui:insert>
</div>
</div>
<div id="bottom">
<ui:insert name="bottom">
<ui:include …Run Code Online (Sandbox Code Playgroud)