2016-11-08 29 views
1

我想覆蓋實現ScreenNameValidator接口的類DefaultScreenNameValidator。爲此,我複製了該類並將其放入另一個模塊中。我做了一個改動,註釋如下: -如何覆蓋liferay 7中的類DefaultScreenNameValidator?

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

    ) 

我使用它獲得了成功的構建。但是當我試圖部署這個項目時,我的錯誤是java.lang.NoClassDefFoundError: com/liferay/portal/kernel/security/auth/ScreenNameValidator。你能否告訴我如何消除這個錯誤。 Thanx提前..

+1

你能分享你的'build.gradle'和'bnd.bnd'文件給我們? – brandizzi

回答

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

我試着用你的方法,但它不工作.. –

0

請確保您有依賴於門戶內核中的build.gradle

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

我用刀片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"); 
    } 
} 
+0

感謝兄弟你的答覆..我做了一個項目相同的鏈接給出,但沒有影響..我的意思是它部署成功,但方法validate()不稱爲.. Plz幫助..提前提前.. –

+0

你可以檢查是否設置service.rank嘗試給一個主要號碼 –