2012-02-21 40 views
1

我想補充一個子組件,而encodeBegin內您可以添加子組件而JSF渲染器內

public void encodeBegin(FacesContext context, 
    UIComponent component) 
    throws IOException { 
    XspInputText xip = new XspInputText(); 

    ViewPickList vplComponent = (ViewPickList) component; 
    ResponseWriter writer = context.getResponseWriter(); 
    String viewName = vplComponent.getViewName(); 
    if (StringUtil.isNotEmpty(viewName)) { 
      xip.setId(vplComponent.getId() + "_InputText"); 
    xip.setValue("Value"); 
    vplComponent.getChildren().add(xip); 
    super.encodeBegin(context, vplComponent); 


    } 

這似乎並沒有工作,但我想添加子組件裏面,並讓它渲染。任何人都可以提出一個更好的方式來做到這一點

+0

你爲什麼要在呈現階段添加子組件? – 2012-02-24 05:54:13

+0

我試圖找到一種方法來根據父組件的值添加子組件,它不必在渲染時發生,只是不知道該放在哪裏。 – 2012-02-24 14:30:06

回答

3

你應該叫你新添加的元件encodeBeginencodeEnd方法來呈現他們。

試試這個:

xip.encodeBegin(context); 
    xip.encodeEnd(context); 

而且看一看This link

請給我反饋,如果它工作或不!

+0

謝謝,我已經找到了更好的方法但是看着我的代碼你是對的 – 2012-07-31 12:56:37

+0

請給出一個參考或解釋你的方式其實我現在正在這樣做,想知道是否有更好或更簡單的方法;)我的使用案例有點不同,我想編輯現有的組件,而不是添加新的組件,我不知道在這個階段(渲染響應)是否正確執行此操作?謝謝 – Heidarzadeh 2012-08-01 06:38:16

+0

嗯,我發現的是您提到的方式是爲RichFaces和Primefaces非常標準,但是我使用的是IBM實現JSF所謂的XPages的。IBM已經在接口稱爲FacesComponent,允許如果實施打造的直流電阻率內部子組件噸。該接口是:com.ibm.xsp.component.FacesComponent。 – 2012-08-01 13:02:06