Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在liferay 7中重写类DefaultScreenNameValidator?_Liferay_Liferay 7 - Fatal编程技术网

如何在liferay 7中重写类DefaultScreenNameValidator?

如何在liferay 7中重写类DefaultScreenNameValidator?,liferay,liferay-7,Liferay,Liferay 7,我试图重写一个类DefaultScreenNameValidator,该类实现了ScreenNameValidator接口。为此,我复制了该类并将其放入另一个模块中。我在注释中做了如下更改:- @Component( property = { "service.ranking:Integer=500" } ) 我用这个做了一个成功的构建。但是当我尝试部署该项目时,我得到了一个错误java.lang.NoC

我试图重写一个类
DefaultScreenNameValidator
,该类实现了
ScreenNameValidator
接口。为此,我复制了该类并将其放入另一个模块中。我在注释中做了如下更改:-

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

    )

我用这个做了一个成功的构建。但是当我尝试部署该项目时,我得到了一个错误
java.lang.NoClassDefFoundError:com/liferay/portal/kernel/security/auth/ScreenNameValidator
。你能建议我如何消除这个错误吗。Thanx提前..

我想知道,创建一个模块来实现
ScreenNameValidator
接口,并在其中定义自定义逻辑,不是更好吗?然后您可以简单地告诉Liferay使用该验证器,而不是
DefaultScreenNameValidator

例如,最低限度的实现:

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
    }
}

确保build.gradle中有对门户内核的依赖

dependencies {
   compile 'com.liferay.portal:com.liferay.portal.kernel:2.0.0'
我使用blade cli制作了一个screenNameValidator,您可以在


你能把你的
build.gradle
bnd.bnd
文件分享给我们吗?谢谢兄弟的回复..我做了一个与链接中给出的一样的项目,但没有效果..我的意思是它部署成功了,但没有调用方法validate()..Plz help..提前调用thanx..你能检查一下是否设置了服务吗.请尝试给出一个主要的数字
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");
    }
}