2016-03-21 9 views
1

Ich versuche, eine benutzerdefinierte Expression Language (EL) Resolver zu schreiben. Der Zweck dieses Resolvers ist es, Methodenaufrufe an eine bestimmte Bean abzufangen, um einen zweiten Parameter hinzuzufügen. Ich habe einen benutzerdefinierten EL-Resolver geschrieben, der die invoke -Methode überschreibt, um das zu tun, was ich will. Ich setze auch den Resolver in die faces-config.xml wie erforderlich.Reorder benutzerdefinierte Unified Expression Language Resolver

Leider habe ich eine Abhängigkeit in meinem Projekt, die auch benutzerdefinierte EL-Resolver deklariert und sie werden vor meinem EL-Resolver in der Resolver-Kette platziert. Da einer der anderen Resolver bereits die invoke -Methode behandelt, wird meine benutzerdefinierte invoke -Methode nie aufgerufen.

Gibt es eine Möglichkeit, die Resolver neu zu ordnen, so dass mein Resolver zuerst aufgerufen wird? Mir ist bekannt, dass Apache MyFaces einen Mechanismus zum Bestellen der Resolver bietet, aber leider kann ich MyFaces nicht in meinem Projekt verwenden.

Antwort

1

Setzen Sie den EL-Resolver in eine separate web fragment project, die schließlich als JAR in Webapp /WEB-INF/lib endet. In dem Web-Fragment-Projekt faces-config.xml, erklären Sie die Reihenfolge zu sein "vor anderen" wie unten.

<ordering> 
    <before> 
     <others /> 
    </before> 
</ordering> 

Oder wenn die „andere Abhängigkeit“ hat auch eine faces-config.xml Datei mit einem <name> erklärt, dann erklärt ausdrücklich, diesen Namen in der Reihenfolge. Dies wäre der einzige Weg, wenn die "andere Abhängigkeit" auch genau den oben genannten Ordnungssatz hätte.

<ordering> 
    <before> 
     <name>nameOfThatOtherDependency</name> 
    </before> 
</ordering> 

ist zu beachten, dass dies die gesamte faces-config.xml auswirkt.

+0

Vielen Dank. Ich hoffte, es gäbe einen anderen Weg, aber ich werde das ausprobieren und dies als die akzeptierte Antwort bezeichnen, wenn alles funktioniert. – jessepeng