如何在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");
}
}