我有一个JSF库(只有css文件)。这个库在一个.jar文件中。css将以
包含在xhtml中。
在html中,它呈现给以下内容:localhost:8080/cms/javax.faces.resource/css/mycss.css.jsf?ln=mylib
primefaces的CSS文件呈现到:localhost:8080/cms/javax.faces.resource/primefaces.js.jsf?ln=primefaces&v=3.5.10
请注意末尾的库版本(&3.5.10)。我怎么能做同样的事?我应该在manifest.mf中写版本吗。或者如何在jar文件中使用jsf-versioning?
不幸的是,这是不可能的。JAR中的资源不支持库版本控制。
您基本上有两种选择:
>
使用简单而难看的方法,将服务器的启动时间作为查询字符串。假设您使用的是OmniFaces,您可以使用它内置的#{startup}
托管bean引用应用程序范围中的java.util.date
实例:
<h:outputStylesheet ... name="some.css?#{startup.time}" />
<h:outputScript ... name="some.js?#{startup.time}" />
<h:outputStylesheet ... name="some.css?v=#{app.version}" />
<h:outputScript ... name="some.js?v=#{app.version}" />
但它适用于
,它有一个非常类似的错误报告,很快就实现了https://github.com/javaserverfaces/mojarra/issues/1216
执行与PrimeFaces相同的操作,创建自定义ResourceHandler
。
public class MyVersionResourceHandler extends ResourceHandlerWrapper {
private ResourceHandler wrapped;
public MyVersionResourceHandler(ResourceHandler wrapped) {
this.wrapped = wrapped;
}
@Override
public Resource createResource(String resourceName) {
return createResource(resourceName, null, null);
}
@Override
public Resource createResource(String resourceName, String libraryName) {
return createResource(resourceName, libraryName, null);
}
@Override
public Resource createResource(String resourceName, String libraryName, String contentType) {
final Resource resource = super.createResource(resourceName, libraryName, contentType);
if (resource == null) {
return null;
}
return new ResourceWrapper() {
@Override
public String getRequestPath() {
return super.getRequestPath() + "&v=1.0";
}
@Override // Necessary because this is missing in ResourceWrapper (will be fixed in JSF 2.2).
public String getResourceName() {
return resource.getResourceName();
}
@Override // Necessary because this is missing in ResourceWrapper (will be fixed in JSF 2.2).
public String getLibraryName() {
return resource.getLibraryName();
}
@Override // Necessary because this is missing in ResourceWrapper (will be fixed in JSF 2.2).
public String getContentType() {
return resource.getContentType();
}
@Override
public Resource getWrapped() {
return resource;
}
};
}
@Override
public ResourceHandler getWrapped() {
return wrapped;
}
}
或者如果您碰巧已经使用OmniFaces,则可以简单一些:
public class YourVersionResourceHandler extends DefaultResourceHandler {
public YourVersionResourceHandler(ResourceHandler wrapped) {
super(wrapped);
}
@Override
public Resource decorateResource(Resource resource) {
if (resource == null || !"mylib".equals(resource.getLibraryName())) {
return resource;
}
return new RemappedResource(resource, resource.getRequestPath() + "&v=1.0");
}
}
<application>
<resource-handler>com.example.MyVersionResourceHandler</resource-handler>
</application>
环境:JSF2.1.7Seam2.3.0JBoss5.1.2 我的应用程序有一个需要本地化的字符串 “我同意WorldSite的隐私政策和Cookie通知” 斜体的隐私政策和Cookie通知是指向其他页面的超链接。 最初我们的facets是这样设置的: 注意:我们已经准备好了URL重写,需要/jsf/Notice。xhtml并重写为 这允许对各个键进行零碎的转换 但这需要一些语言的变通方法(在“i
问题内容: 我在C 项目的资源中有一个版本资源,其中包含版本号,版权和构建详细信息。有一种简单的方法可以在运行时访问它,以填充我的“帮助/关于”对话框,因为我当前正在维护此信息的单独的const值。理想情况下,该解决方案应适用于Windows / CE移动版和Visual C 的早期版本(6.0或更高版本)。 问题答案: 这是我原始答案的编辑版本。
Android Studio建议在构建工作流程中使用gradle包装器。但是,如果您使用git进行版本控制,. jar文件会被忽略,并且据说不会签入,这是我得到的。但我的工作流程与普通人有点不同。我们也同时使用Team Foundation Server和git。使用自定义MSBuildTask调用gradle构建。这是我的. gitignore文件的样子: 它目前的工作方式是,首先我们将TFS和
主要内容:JSF Web资源示例:访问图片文件,JSF Web资源示例:访问CSS文件,JSF Web资源示例:访问JavaScript文件JSF Web资源是在Web应用程序中正确呈现所需的资源。它包括图像,脚本(JS)文件和任何用户创建的组件库。 JSF提供了一种存储Web资源的标准方式。 您可以使用以下任何一种来存储资源。 它必须存储在Web应用程序根目录资源目录的子目录中:,如:,等等。 打包在Web应用程序的类路径中的资源必须位于Web应用程序中的目录的子目录中:。 您可以使用此文件结
问题内容: 我有一个带有工具栏的Java项目,该工具栏上带有图标。这些图标存储在名为resources /的文件夹中,因此路径可能是“ resources / icon1.png”。该文件夹位于我的src目录中,因此在编译后,该文件夹将被复制到bin / 我正在使用以下代码访问资源。 (imageName将为“ resources / icon1.png”等)。在Eclipse中运行时,效果很好。
编辑: 结构: A.jar(或A.war) | |src/main/resources/config。属性-(标记为p1) | ||依赖的罐子 当我运行A. jar(或A. war,因为B. jar可以由Web应用程序或java进程调用)时,我希望B. jar中的代码始终使用p1; 当我单独运行B. jar时,我希望B. jar中的代码使用p2 另一种描述方式是主jar/war中同名的资源文件(这