2012-12-08 31 views
5

Kullanıcı commandButton numarasına ulaştıktan sonra göstermek/gizlemek istediğim bir bileşenim var.AJAX render özniteliği rendered = "false" bileşeniyle çalışmaz

Şöyle:

<h:commandButton id="showButton" value="#{bean.wasPressed ? 'Hide' : 'Show'}"> 
    <f:ajax listener="#{bean.toggle()}" render="explanation showButton" /> 
</h:commandButton> 

ve

<h:panelGroup id="explanation" rendered="#{bean.wasPressed}"> 
    <h:outputText value="something" /> 
</h:panelGroup> 

bean.toggle() basitçe uygun doğru veya yanlış olarak wasPressed özelliğini ayarlar. <h:form prependId="false"> kullanıyorum.

Sorun, düğmemdeki render özniteliğinin değeridir. Açıkça, her ikisi de: explanation ve showButton.

showButton her zaman mevcut olduğu sürece (yalnızca etiketini değiştirir), explanation yalnızca wasPressed özelliği true olduğunda geçerlidir. Aksi takdirde diyor:

malformedXML: güncelleme sırasında: explanaition bu sorunu çözebilir nasıl

bulunamadı?

Öğeyi kaynak kodunda saklamak için geri dönmek istemiyorum. Bu nedenle, herhangi bir jQuery geçişini (-) veya öğeyi style="display: none" veya bu öğelerden herhangi birini kullanarak gizlemenin herhangi bir yolunu kullanmamak istiyorum.

JSF 2.1'de bile kullanılabilir mi?

+2

bakmak .... bir işlenmez jsf elememt http başvuramaz: // stackoverflow. com/a/10707789/617373 – Daniel

+0

Bir çekicilik gibi çalışır, teşekkürler! Bu soruya cevap ekleyebilir misiniz, böylece kabul edebilir miyim? –

+0

Bir şey değil. – Daniel

cevap

9

Sen, DOM Ağacı gelen öğeleri kaldırmak için "için bir JSF yoludur" = false hale, işlenmez unsurları güncelleştiremezsiniz

onun css ekranı gibi değil: none veya visibility: < gizli - bu iki Öğeleri DOM ağacında tutacak ancak gizli, JSF oluşturulduğunda = false bile DOM ağacındaki öğeyi (tutmaya) bile tutmaz (sayfanın "görünüm kaynağında bile görmezsiniz)

So Eğer sizde panelGroup'u başka bir 'panelGroup' ile sarmanız ve sarıcı

<h:commandButton id="showButton" value="#{bean.wasPressed ? 'Hide' : 'Show'}"> 
    <f:ajax listener="#{bean.toggle()}" render="explanationWrapper showButton" /> 
</h:commandButton> 


<h:panelGroup id="explanationWrapper"> 
    <h:panelGroup id="explanation" rendered="#{bean.wasPressed}"> 
     <h:outputText value="something" /> 
    </h:panelGroup> 
</h:panelGroup> 

aynı zamanda bir kimliğe sahip olduğunu panelGroup için bir sarıcı ekleyin ve buna atıfta benzer soru

Can you update an h:outputLabel from a p:ajax listener?