【问题标题】:How to override class DefaultScreenNameValidator in liferay 7?如何在 liferay 7 中覆盖类 DefaultScreenNameValidator?
【发布时间】:2017-03-21 16:21:51
【问题描述】:

我正在尝试覆盖实现ScreenNameValidator 接口的类DefaultScreenNameValidator。为此,我复制了该类并将其放入另一个模块中。我所做的一项更改是注释如下:-

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

    )

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

【问题讨论】:

  • 您能将您的build.gradle 和bnd.bnd 文件分享给我们吗?

标签: liferay liferay-7


【解决方案1】:

我想知道,创建一个也实现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
    }
}

【讨论】:

    【解决方案2】:

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

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

    我使用blade-cli 制作了一个screenNameValidator,您可以在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");
        }
    }
    

    【讨论】:

    • 感谢兄弟的回复..我做了一个与链接中给出的相同的项目,但没有效果..我的意思是它部署成功但方法 validate() 没有被调用..请帮助..thanx提前..
    • 你能检查是否设置了 service.rank 尝试给一个主要号码
    猜你喜欢
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 2021-07-28
    • 2017-12-14
    • 2012-12-29
    • 1970-01-01
    相关资源
    最近更新 更多