Realizarea unei componente în afara domeniului de aplicare a formularului în JSF2

Creez o pagină simplă care, după ce dă clic pe un buton, înlocuiește o grupă de panouri cu un altul. În primul rând, codul:



               
        
            <div class="rightContent">

                

                    

This should disappear

                     
                        
 
                    

                

                
                    Works!
                

            </div>     
        
    


Fasada de susținere stabilește pur și simplu primul pas ca fiind fals, iar al doilea este drept.

Now, when I tried running this, I got contains an unknown id 'lol' - cannot locate it in the context of the component j_idt39. After googling a bit, I found out that for elements outside the form's scope, I need to use SEPARATOR_CHAR (:). That didn't work. So I tried messing with different combinations of #{component} and #{cc}, but nothing works. I even found this awesome explanation, but again, I failed miserably. If I use @all, everything goes ok (one panel is replaced with another), but I really need to render a specific component.

Ajutor? Vă rog?

0
': lol', și alții câțiva ': ceva: somethingElse: lol' (am desprins atașat xhtml cât de mult am putut).
adăugat autor Misa, sursa
Cum ați folosit "SEPARATOR_CHAR (:)"? Nu puteți folosi doar CSS \ JS pentru a obține acest lucru?
adăugat autor Hitham S. AlQadheeb, sursa

1 răspunsuri

You need to update the common parent <div class="rightContent"> instead. This one is always rendered and thus guarantees that JavaScript/Ajax can access and mainpulate its children. Replace it by and give it an id.


    
        

This should disappear

         
            
 
        
    

    
        Works!
    

Using this Test.java class:

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ManagedBean
@ViewScoped
public class Test {
    private int number = 0;

    public void firstStepCompleted() {
        number++;
    }

    public boolean isFirstStep() {
        return number == 0;
    }

    public boolean isSecondStep() {
        return number == 1;
    }
}

Note that I removed the superfluous Boolean#booleanValue() calls and the duplicated rendered contition on the form.

If that still doesn't work, then the /elements/templateWithMenu.xhtml apparently contains another naming container component which has prepended its ID. For starters who haven't memorized all naming container components yet, an easy way to figure the real right client ID is to open the page in browser, rightclick and View Source and then locate the JSF-generated HTML element and take exactly its id attribute value (and prefix it with : in the ).

0
adăugat
IT WORKS (șablonul nu a fost problema)! Mulțumesc. Doar pentru a fi sigur de referință viitoare, cum se face că "lol" nu a fost părinte comun sau, în acest caz, ar funcționa dacă folosesc id = "content" în cel de-al doilea panelGroup, în loc de primul?
adăugat autor Misa, sursa
Am înţeles. Mulțumiri!
adăugat autor Misa, sursa
Acesta este modul în care funcționează JavaScript/ajax. JavaScript necesită ca elementul care trebuie actualizat să fie întotdeauna redat de JSF (și astfel nu are o condiție rendered în sursa JSF). În caz contrar, JavaScript nu va putea accesa și manipula copiii. JavaScript nu va elimina niciodată întregul element, doar manipulează/elimină copiii acestuia.
adăugat autor BalusC, sursa
Cu plăcere.
adăugat autor BalusC, sursa
JavaScript, România - Moldova
JavaScript, România - Moldova
328 participanți

Comunitatea Română JavaScript: github.com/js-ro Pentru confort, opriți notificările. Parteneri: @node_ro, @php_ro, @python_ro, @seo_ro, @RomaniaGroup, @ai_ro, @Grupuri_IT Offtop: @holywars_ro Joburi: @js_jobs_ro Sponsored with ❤️ by ciupacabra.com