2012-08-23 15 views
5

İçinde bir JSP 2.0 <ui:component> var, içinde bir içerik ile ilgili özel bir kenarlık oluşturmak için bir Kompozit kullanan bir sütun ile bir <p:dataTable> var. Şimdi içeriğinde bulunan ajax rendered özniteliğinde <p:dataTabe>'u tanımlamam gerekiyor.Kompozitin ana Adlandırma Kabı'na nasıl erişilir?

<ui:component> 
    <p:dataTable id="dataTable" var="userItem" ... /> 
    <p:column> 

     <my:borderBox id="borderBox"> 
      <p:commandButton 
       action="#{userController.doDelete(userItem.id)}" 
       value="delete" 
       update="?????"/> <!-- How to address the dateTable? --> 
     </my:borderBox> 

     </p:column> 
    </p:dataTable> 
<ui:component> 

Benim BorderBox:

<html xmlns:composite="http://java.sun.com/jsf/composite" ...> 
    <composite:interface> 
     <composite:attribute name="styleClass" default="" type="java.lang.String"/> 
    </composite:interface> 

    <composite:implementation> 
     <h:panelGroup ...> 
     ... 
     <composite:insertChildren/> 
     </h:panelGroup> 
    </composite:implementation> 

Benim fikrim boş olması

update=":#{component.namingContainer.parent.namingContainer.clientId}:dateTable

Ama component.namingContainer.parent dikişleri gibi bir şey kullanmaktı. Bu ifadelere <p:commandButton> değiştirdiğinizde

: Liste tamamlandığında tanımlamak için fikrimi mybey: Sorunun ne hiçbir fikrim yok

Parent ClientId 1: [email protected]d957419 

Parent ClientId 2: [email protected] 
Parent ClientId 3: main_form:profilTabView:dataTable:0:borderBox 

Parent ClientId 4: 
Parent ClientId 5: 

:

Parent ClientId 1: #{component} 
Parent ClientId 2: #{component.namingContainer} 
Parent ClientId 3: #{component.namingContainer.clientId} 

Parent ClientId 4: #{component.namingContainer.parent} 
Parent ClientId 5: #{component.namingContainer.parent.namingContainer} 

Bu çıktıyı almak yanlış mı yoksa bazı hatalar mı yoksa daha iyi bir yolu var mı? (Ama dateTable için mutlak identifyer düzeltmek kullanamazsınız!)

Sürümleri: Primeface 3.2, Mojarra 2.1.6 GlassFish 3.1.2

+1

Ben maalesef 'ui: component' etiketini kullanmıyorum; Genellikle, bir EL ifadesinden "# {cc.parent.id}" gibi bir üst adlandırma kapsayıcısından başvurabileceğiniz Kompozit Bileşenleri kullanırım. Ancak, "ebeveyni", EL ifade dilinde ayrılmış bir değişkendir. Bu nedenle, üst ad adlandırma kapsayıcısı kimliğini geri almak için # {parent.id} 'kadar basit olması gerekir. –

+0

@maple_shaft: '', örtülü olarak kompozit bileşenler tarafından kullanılır. Bu nedenle, "" yerine doğrudan bildirmek daha temizdir. – BalusC

+0

Hangi JSF impl/sürüm ve PF sürümünü tam olarak kullanıyorsunuz? – BalusC

cevap

1

üzerine bu Sorununa bir çözüm var. Başka bir çözüm bulamazsanız, alternatif olarak kullanabilirsiniz. Çözüm jsf ve javascript arasındaki bir karışımdır. Masanız için bir widget (ör. "MyTable") tanımlarsınız.

<p:dataTable id="dataTable" var="userItem" ... widgetVar="myTable"/> 

"myTable" adlı global bir javascript değişkeni oluşturuldu. Bu widget nesnesi bir kimlik içerir. Eğer olay onklick tanımlamak size (KomutDüğmesi'ı: KomutDüğmesi'ı değil p h): düğmesine komut için

<h:commandButton id="deleteItem" action="#{userController.doDelete(userItem.id)}" 
value="delete" onclick="PrimeFaces.ab({formId:$(this).closest('form').attr('id'),source:this.id,process:'@all',update:myTable.id});return false;" /> 


formID - açıkça formu kimliğini girin ya da benim jQuery işlevini
kullanmak güncelleme - myTable.id bir tablo olduğunu Kimlik (tam olarak div sarıcı)
process - @all, @ bu, vs ..

İlgili konular