我用的时候
<h:outputStylesheet library="css" name="styles.css">
Run Code Online (Sandbox Code Playgroud)
要么
<h:graphicImage library="images" name="image.jpg">
Run Code Online (Sandbox Code Playgroud)
然后在HTML中我得到这样的东西
<link type="text/css" rel="stylesheet" href="/appName/javax.faces.resource/styles.css.xhtml?ln=css" />
Run Code Online (Sandbox Code Playgroud)
因此用户可以看到用于编写此应用程序的框架.如何避免javax.faces.resource/styles.css.xhtml?ln=css
向用户显示,但仍然使用facelets(不是html,如<link rel=...
>)?当用户只是看到css文件的路径时,它会很好resources/css/styles.css
这不是直接可能没有重新实现整个ResourceHandler
带的帮助下ResourceHandlerWrapper
作为对这个问题回答lu4242,这不完全是一个很简单的工作.这是一个硬编码public static final
在现场不断ResourceHandler
类的ResourceHandler#RESOURCE_IDENTIFIER
.您可能希望发布一个功能请求,使其可以NamingContainer
在JSF 1.2到JSF 2.0步骤中对分隔符进行外部配置.
但你为什么要这样做?还有很多其他的东西可以提供有关所用框架的足够提示.在JSF的情况下,可以是请求URL模式(/faces/*
,*.jsf
或*.xhtml
),响应头(X-Powered-By
),特定隐藏表单字段(javax.faces.ViewState
),自动生成的客户端ID(默认为woodstocked),JS库使用(jsf.js
),等等.
这个有可能.FacesServlet上的代码如下所示:
ResourceHandler resourceHandler = facesContext.getApplication().getResourceHandler();
// Call ResourceHandler.isResourceRequest(javax.faces.context.FacesContext).
if (resourceHandler.isResourceRequest(facesContext))
{
// If this returns true call ResourceHandler.handleResourceRequest(javax.faces.context.FacesContext).
resourceHandler.handleResourceRequest(facesContext);
}
Run Code Online (Sandbox Code Playgroud)
默认情况下,默认实现使用ResourceHandler#RESOURCE_IDENTIFIER常量,但在技术上可以编写使用其他结构的ResourceHandlerWrapper.唯一的问题是包装器应该实现所有内容,并且您不能将任何内容委托给默认算法.您可以重用MyFaces Shared上的代码,但请记住这是内部,因此请使用maven shade插件或硬拷贝等内容来重新定位软件包名称.
不可能的是为现有的ResourceHandler实现更改它(例如,使用自定义ResourceHandler实现的组件,如t:captcha或其他变体),因为所有这些都与常量相关联.
无论如何,我创建了MFCOMMONS-36,将其添加到MyFaces Commons上添加的扩展ResourceHandler实现中.
归档时间: |
|
查看次数: |
14549 次 |
最近记录: |