Обновление:
Согласно комментарию Линкольна, новый релиз PrettyFaces 3.4.3 поддерживает JSF 2.3. Помимо других изменений, теперь он делает RewriteViewHandler
расширением ViewHandlerWrapper
, как предлагает BalusC.
Фон:
Это выглядиткак PrettyFaces 3.4.2 не полностью совместима с JSF 2.3.
Неабстрактный класс org.ocpsoft.rewrite.faces.RewriteViewHandler.RewriteViewHandler
расширяет javax.faces.application.ViewHandler
, но не переопределяет абстрактный метод getWebsocketURL
.
Вы можете легковоспроизведите это с красивыми лицами и API JSF 2.3 на пути к классам:
package my.pkg;
import org.ocpsoft.rewrite.faces.RewriteViewHandler;
public class PrettyFacesTest {
public static void main(String[] args) {
new RewriteViewHandler(null).getWebsocketURL(null, null);
}
}
Результат:
Exception in thread "main" java.lang.AbstractMethodError: org.ocpsoft.rewrite.faces.RewriteViewHandler.getWebsocketURL(Ljavax/faces/context/FacesContext;Ljava/lang/String;)Ljava/lang/String;
at my.pkg.PrettyFacesTest.main(PrettyFacesTest.java:7)
RewriteViewhandler
зарегистрирован в rewrite-integration-faces-3.4.2.Final.jar/META-INF/faces-config.xml
:
<application>
<navigation-handler>org.ocpsoft.rewrite.faces.RewriteNavigationHandler</navigation-handler>
<view-handler>org.ocpsoft.rewrite.faces.RewriteViewHandler</view-handler>
</application>
Я не уверен, есть ли шанс предотвратить эту регистрацию. Если это так, вы можете создать CustomRewriteViewHandler
, который расширяет RewriteViewHandler
, переопределяет getWebsocketURL
и делегатов, которые вызывают super.parent
:
import javax.faces.application.ViewHandler;
import javax.faces.context.FacesContext;
import org.ocpsoft.rewrite.faces.RewriteViewHandler;
public class CustomRewriteViewHandler extends RewriteViewHandler {
public CustomRewriteViewHandler(ViewHandler viewHandler) {
super(viewHandler);
}
@Override
public String getWebsocketURL(FacesContext context, String channel) {
return super.parent.getWebsocketURL(context, channel);
}
}
Затем вы зарегистрируете этот CustomRewriteViewHandler вместо исходного:
<application>
<view-handler>my.pkg.CustomRewriteViewHandler</view-handler>
</application>
Как BalusC описывает здесь , вы не можете заблокировать части faces-config.xml
из включенного jar
. Вместо этого вы можете установить <faces-config ... metadata-complete="true">
, что не приведет к обработке ни faces-config.xml
, ни аннотаций для любых включенных jar
с, что будет стоить так, что вам потребуется переопределить все материалы для 3d-вечеринок, необходимые в вашем faces.config.xml
.