2016-11-08 1 views
1

Ich versuche, eine Klasse DefaultScreenNameValidator zu überschreiben, die ScreenNameValidator Schnittstelle implementiert. Dazu habe ich die Klasse kopiert und in ein anderes Modul gesteckt. Eine Änderung, die ich gemacht habe, ist in Annotation, die wie folgt ist: -Wie überschreiben Klasse DefaultScreenNameValidator in Liveray 7?

@Component(
     property = { 
       "service.ranking:Integer=500" 
       } 

    ) 

Ich habe eine erfolgreiche Build mit dieser. Aber als ich versuchte, das Projekt zu implementieren, bekam ich Fehler als java.lang.NoClassDefFoundError: com/liferay/portal/kernel/security/auth/ScreenNameValidator. Kannst du mir vorschlagen, wie man diesen Fehler ausmerzt. Vielen Dank im Voraus ..

+1

Könnten Sie Ihre 'build.gradle' und' bnd.bnd' teilen Dateien an uns? – brandizzi

Antwort

1

Ich frage mich, wäre es nicht besser, stattdessen ein Modul zu erstellen, das auch die ScreenNameValidator Schnittstelle implementiert, und definieren Sie Ihre benutzerdefinierte Logik dort? Dann können Sie einfach Liferay sagen, diesen Validator anstelle des DefaultScreenNameValidator zu verwenden.

Zum Beispiel eine minimalistische Umsetzung:

import com.liferay.portal.kernel.security.auth.ScreenNameValidator; 

import org.osgi.service.component.annotations.Component; 

@Component(
    immediate = true, 
    service = ScreenNameValidator.class 
) 
public class CustomScreenNameValidator implements ScreenNameValidator { 

    @Override 
    public boolean validate(long companyId, String screenName) { 
     // Your custom logic 
    } 
} 
+0

Ich versuchte mit Ihrem Ansatz, aber es funktioniert nicht .. –

0

sicherstellen, dass Sie die Abhängigkeit haben portale-Kernel in der build.gradle

dependencies { 
    compile 'com.liferay.portal:com.liferay.portal.kernel:2.0.0' 

ich eine screenNameValidator Klinge-cli mit gemacht können Sie sehen Sie das Projekt an https://github.com/bruinen/liferay-blade-samples/tree/master/liferay-workspace/modules/blade.screenname.validator

import com.liferay.portal.kernel.security.auth.ScreenNameValidator; 
import org.osgi.service.component.annotations.Component; 

import java.util.Locale; 

@Component(
     immediate = true, 
     property = {"service.ranking:Integer=100"}, 
     service = ScreenNameValidator.class 
) 
public class CustomScreenNameValidator implements ScreenNameValidator { 

    @Override 
    public String getAUIValidatorJS() { 
     return "function(val) {return !(val.indexOf(\"admin\") !==-1)}"; 
    } 

    @Override 
    public String getDescription(Locale locale) { 
     return "The screenName contains reserved words"; 
    } 

    @Override 
    public boolean validate(long companyId, String screenName) { 
     return !screenName.contains("admin"); 
    } 
} 
+0

Dank bro für Ihre Antwort..Ich habe ein Projekt gleich wie in der Verbindung, aber keine Wirkung..Ich meine es erfolgreich bereitgestellt, aber Methode validate() wird nicht aufgerufen .. Plz help..thanx im Voraus .. –

+0

Können Sie überprüfen, ob service.rank versucht ist, geben Sie eine größere Anzahl –

Verwandte Themen