我提出位置「myproject.com」(例如)是作爲「HTTP:// localhost:8080/MyProject /「,使用Nginx的proxy_pass選項。所有工作正常,但PrimeFaces樣式表和腳本嘗試去「/ MyProject /文件」,由於代理不存在「http:// localhost:8080/MyProject/MyProject/file」,所以不好。 如何讓PF使用./file而不是/ MyProject/file?使Nginx的位置塊或鏈接到MyProject文件夾是不好的變體。JSF和/或樣式表PrimeFaces和腳本去/Project/javax.faces.resource代替./javax.faces.resource
1
A
回答
1
即使我有強烈的感覺,這個問題確實需要在Ngnix代理方解決,我將你怎麼可以「變通」,它從JSF側解釋。
JSF資源由Resource
類表示,其中getRequestPath()
方法負責返回資源URL。您可以創建一個自定義的Resource
實現,其中getRequestPath()
相應地執行/覆蓋。
public class MyResource extends ResourceWrapper {
private Resource wrapped;
public MyResource(Resource wrapped) {
this.wrapped = wrapped;
}
@Override
public String getRequestPath() {
String contextPath = FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath();
return "." + wrapped.getRequestPath().substring(contextPath.length());
}
@Override
public Resource getWrapped() {
return wrapped;
}
}
現在,這個自定義實現覆蓋默認JSF Resource
,你需要創建一個自定義ResourceHandler
實現,其中您在createResource()
方法返回定製Resource
實現代替。
public class MyResourceHandler extends ResourceHandlerWrapper {
private ResourceHandler wrapped;
public MyResourceHandler(ResourceHandler wrapped) {
this.wrapped = wrapped;
}
@Override
public Resource createResource(String resourceName, String libraryName) {
return new MyResource(wrapped.createResource(resourceName, libraryName));
}
@Override
public ResourceHandler getWrapped() {
return wrapped;
}
}
最後,爲了得到它的運行,它註冊爲在faces-config.xml
<resource-handler>
。
<application>
<resource-handler>com.example.MyResourceHandler</resource-handler>
</application>
0
我對這個答案有點遲,但我有同樣的問題,並試圖做'nginx'的方式。
所以也許這也有助於他人。
可以定義你的nginx配置的第二位置(這當然取決於你的具體配置),將匹配匹配的位置,圖案中的每個業務的具體規則。
在nginx的服務器配置您的第一個位置,看起來有點類似於此:
location/{
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080/MyProject$request_uri;
}
,那麼你只需要添加一個第二位置的資源,它會告訴nginx的不中添加MyProject的改寫爲匹配到特定位置的圖案的資源,如:
location /MyProject {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080$request_uri;
}
注意,proxy_pass已經改變爲「/MyProject/javax.faces.resource」。您的js,圖像和css現在應該再次正確傳遞。
更多位置可以在nginx的documentation被發現。
相關問題
- 1. 樣式JSF datatable與primefaces
- 2. JSF和PrimeFaces策略
- 3. 當我們在textarea中粘貼代碼時,是否有像ckeditor這樣的腳本去除樣式和腳本?
- 4. JSF h:outputScript排序和PrimeFaces jQuery
- 5. JSF和Primefaces條件導航
- 6. jsf和primefaces更新問題
- 7. 集成JSF,Spring和Primefaces
- 8. 替代cdi,seam 3和primefaces 3
- 9. 多個替代樣式表
- 10. 形式方法和燈箱(或替代)
- 11. asp.net mvc腳本和樣式引用
- 12. Mod_rewrite - 圖像,樣式和腳本丟失
- 13. jQuery.html()刪除腳本和樣式
- 14. Xamarin Forms - IOS,腳本和樣式不叫
- 15. 在Chrome和Firefox中切換替代樣式表
- 16. JSF在樣式表中設置樣式?
- 17. JSF Primefaces菜單引導式
- 18. JSF PrimeFaces丟失數據和會話
- 19. Liferay 6.2和JSF/Primefaces集成問題
- 20. 簡單登錄shiro wildfly jsf和primefaces
- 21. 錯誤下載使用JSF和Primefaces
- 22. ContentFlow的使用使用Java,PrimeFaces和jsf
- 23. JSF 2.0和帶有Facelets的Primefaces
- 24. 大量用戶的JSF和Primefaces性能
- 25. PrimeFaces 3.0和/或jsf 2.0是否支持SDK 1.4?
- 26. 查找和替換腳本
- 27. 如何使用PrimeFaces和JSF減少代碼?
- 28. JSF - 替代「rendered =」?
- 29. 和&SQL腳本一樣
- 30. jQuery表格樣式與CSS表格樣式的替代行
所以你建議做這樣的事情(nginx): location/MyProject { proxy_pass http:// localhost:8080/MyProject /; } ?謝謝。 – Vladiator 2012-08-13 14:43:15
我不會做Ngnix,所以我不能詳細介紹它。由於您在stackoverflow.com(針對程序員的QA站點)而不是在serverfault.com(serveradmins的質量保證站點)提問此處,所以我瞭解到您正在尋找一個程序化解決方案/解決方法。 – BalusC 2012-08-13 14:45:57