2012-11-10 21 views
5

Sorunum, datatable sayfamda bir sütunu varsayılan olarak göstermeye çalıştığım ve komut düğmesine basıldığında bunu bir inputtxt ile değiştireceğim. Bir çözüm bulamadınız. İlk mesaj bu arada. a4j: commandButton reRendering rich: datatable

Bir a4j var: KomutDüğmesi'ı benim dataTable

<a4j:commandButton reRender="yieldTable" action="#{yieldSearch.activateVisible()}" 
id="modify" styleClass="editLargeIcon" value="Modify"> 
</a4j:commandButton> 

<rich:dataTable id="yieldTable" value="#{yieldSearch.yfitem.yielditem}" var="_yield"> 
<rich:column> 
<f:facet name="header">%-YLD</f:facet> 
<h:outputText value="#{_yield.yfYield}" rendered="#{not yieldSearch.visible}"> 
</h:outputText> 
<h:inputText rendered="#{yieldSearch.visible}" /> 
</rich:column> 

bu kısmını reRender için arıyorum Ve bu yöntemi etkinleştirmek istiyoruz

@Name("yieldSearch") 
@Scope(ScopeType.CONVERSATION) 
public class YieldSearch implements Serializable{ 

private Boolean visible; 

public void activateVisible(){ 
    this.setVisible(true); 
    System.out.print(true); 
} 

    public void setVisible(Boolean visible) { 
    this.visible = visible; 
} 

public Boolean getVisible() { 
    return visible; 
} 

Herhangi bir yardım (sadece ilgili kodu gösterir) çok takdir edildi.

cevap

5

Her iki bileşeni de <a4j:outputPanel id="myPanel" ajaxRendered="true"/> ürününe sarmanız gerekir. Her iki bileşenin de yeniden üretilmemesinin nedeni, rendered="false" olarak ayarladığınız bileşenin, ilk görünüm oluşturma işleminde tarayıcıya gönderilmemesidir.

<a4j:outputPanel id="myPanel" ajaxRendered="true"> 
<h:outputText value="#{_yield.yfYield}" rendered="#{not yieldSearch.visible}"/> 
<h:inputText rendered="#{yieldSearch.visible}" /> 
</a4j:outputPanel> 

ajax işi yeniler yolu, yeni biçimlendirme ile güncellemek için DOM ağacında bir clientId bulmak için javascript kullanmaktır, yani bileşen zaten DOM ağacında olmalıdır. rendered="false"'u ayarladığınızdan, bileşen, başlamak için DOM ağacında asla bulunmadı. Yani bir ajax isteğinde, tarayıcı, ne hakkında konuştuğunuzu bilmiyor çünkü güncellemek için clientId'yi bulamıyor. ajax yenileme bunu Bu durumda

+1

içinde yuvalanmış ettik ne olursa olsun bir bütün olarak bu bileşen güncellenir böylece ajaxRendered="true" ile outputPanel kullanma

, sen bütün outputPanel yeniliyoruz, 'zengin <: dataTable> 'UIContainer işlevi görecektir, bu nedenle veri tablosunun buna göre '/'' göstereceğini/gizleyeceğini göreceksiniz. Bu davada OP'nin konuşmayı izleyememesi gibi görünüyor. –