2016-07-30 68 views
0

我測試JSF組件,但我得到的NullPointerException :(問題的代碼是:的getAttributes()獲得( 「的attributeName」)在UIComponent構造返回null

@FacesComponent(value="mycomponent0") 
public class MyComponent extends HtmlPanelGroup{ 

MyComponent(){ 
    String a0=this.getAttributes().get("attr0"); 
} 

} 

的taglib.xml的標記包含attr0屬性和標籤的用法是:

<abc:mycomponent attr0="helloworld"></abc:mycomponent> 

所以我的問題是什麼原因造成的問題,以及如何處理它

感謝

+0

閱讀BalusC答案在這裏,爲解釋: https://stackoverflow.com/questions/30404268/cannot-get-custom-component -attribute從 - 支持bean – Pazura

回答

0

我想我可以弄清楚如何解決NPE問題...

我不使用構造函數的主體來獲取屬性,但在overriden encodeBegin方法中獲取屬性;

@Override 
    public void encodeBegin(FacesContext context) throws IOException {  

     String id=this.getAttributes().get("id").toString(); 
     System.out.println("debug: attribute id="+id); 

     String color=this.getAttributes().get("attr0").toString(); 
     System.out.println("debug: attribute attr0="+attr0); 


     HtmlOutputLabel label0=new HtmlOutputLabel(); 
     label0.setValue("attribute attr0 value="+attr0); 
     this.getChildren().add(label0); 

     super.encodeBegin(context); 
    } 

所以它的工作,我認爲我很好這個解決方案;我不知道它是最優化的方式,所以請分享一些片段...