私は静的コンテンツ専用のサーバーを持っているので、javascript ファイルを格納するためにリソース ディレクトリを使用したくありませんが、<h:outputScript />
タグの使用を停止したくありません。
そのタグに、 RES_NOT_FOUNDの代わりにファイルが配置されている静的サーバーへのリンクを生成させるにはどうすればよいですか。ファイルが存在するかどうかを確認するためにJSFは必要ありません...
私は試した:<h:outputScript name="#{requestBean.staticURL}/javascript.js"/>
引き起こす:<script type="text/javascript" src="http://static.server.com/javascript.js"></script>
しかし、それは生成します:<script type="text/javascript" src="RES_NOT_FOUND"></script>
私に何ができる?
解決策: ダニエルが良い解決策を教えてくれました!
Omnifaces のソース コードをダウンロードし、org.omnifaces.resourcehandler.CDNResourceHandle.createResource(String resourceName, String libraryName)
メソッドを次のように変更しました。
public Resource createResource(String resourceName, String libraryName) {
final Resource resource = wrapped.createResource(resourceName, libraryName);
if (cdnResources == null) {
return resource;
}
String resourceId = ((libraryName != null) ? libraryName + ":" : "") + resourceName;
String path = cdnResources.get(resourceId);
if(path == null){
if(libraryName != null){
resourceId = libraryName + ":%";
path = cdnResources.get(resourceId);
if(path == null){
return resource;
}
path += "/"+resourceName;
}
else return resource;
}
final String requestPath = path;
return new ResourceWrapper() {
@Override
public String getRequestPath() {
return requestPath;
}
@Override
public Resource getWrapped() {
return resource;
}
};
}
この変更により、これをweb.xmlファイルに追加できます
<context-param>
<param-name>org.omnifaces.CDN_RESOURCE_HANDLER_URLS</param-name>
<param-value>
somelib2:%=http://cdn.example.com/somelib2,
js/script1.js=http://cdn.example.com/js/script1.js,
somelib:js/script2.js=http://cdn.example.com/somelib/js/script2.js,
otherlib:style.css=http://cdn.example.com/otherlib/style.css,
images/logo.png=http://cdn.example.com/logo.png
</param-value>
</context-param>
に注意してください。これにより、 somelib2somelib2:%=http://cdn.example.com/somelib2
ライブラリ内のすべてのリソースがhttp://cdn.example.com/somelib2内の相対パスにポイントされます。次に例を示します。
<h:outputScript name="js/myjs.js" library="somelib2" />
出力します:
<script type="text/javascript" src="http://cdn.example.com/somelib2/js/myjs.js"></script>
これは<h:outputScript /><h:outputStylesheet /><h:graphicImage />
、リソースを使用するものすべてで機能します。