我正在使用Primefaces。對於某些頁面,我想排除primefacs包含的資源,尤其是主題資源。排除JSF中的資源
<link type="text/css" rel="stylesheet" href="/context/javax.faces.resource/theme.css?ln=primefaces-owntheme" />
我嘗試用SystemEventListener如下:
public class PrimeFacesResourceRemover implements javax.faces.event.SystemEventListener {
@Override
public void processEvent(SystemEvent event) throws AbortProcessingException {
FacesContext context = FacesContext.getCurrentInstance();
UIViewRoot viewRoot = context.getViewRoot();
for (UIComponent resource : viewRoot.getComponentResources(context, "head")) {
Map<String, Object> attrs = resource.getAttributes();
String resourceLibrary = (String) attrs.get("library");
String resourceName = (String) attrs.get("name");
if ("primefaces-owntheme".equals(resourceLibrary) && "theme.css".equals(resourceName)) {
// Remove resource from view
context.getViewRoot().removeComponentResource(context, resource, HEAD);
}
}
}
/**
* {@inheritDoc}
*/
@Override
public boolean isListenerForSource(Object source) {
return (source instanceof UIViewRoot);
}
}
,並在faces-config.xml中
<application>
<system-event-listener>
<system-event-listener-class>
com.mycompany.mavenproject1.PrimeFacesResourceRemover
</system-event-listener-class>
<system-event-class>
javax.faces.event.PostAddToViewEvent
</system-event-class>
</system-event-listener>
</application>
這工作得很好,當我有一個頁面上的種源但是這些不適用於Primefaces包含的資源。我怎樣才能刪除這些資源?
當我明白你的權利,這是不可能改變渲染器的輸出,而無需重寫呢?在我的情況下,我想排除主題CSS只有當它是一個離線頁面(app.cache)。在其他所有情況下,我對PrimeFaces HeadRenderer感到滿意。 – h2mch
你也可以擴展它而不是覆蓋,但是最終你會得到相同的代碼。或者當你說「我很高興」時,你是否專門針對那些無用的方面:',''等PrimeFaces'HeadRenderer'?我想不出任何其他具體原因,爲什麼你明確提到你對此感到滿意。 –
BalusC
是的,我正在使用這些方面。特別是最後一個方面要確保,我可以覆蓋默認包括(CSS)。爲什麼你在想,這些方面是無用的? – h2mch