2009-08-11 7 views
0

Hat jemand Erfolg gehabt, wenn er eine rich:toggleControl Komponente an eine Radiobutton-Komponente anfügt (h:selectOneRadio) oder alternativ eines seiner Kinder Elemente auswählt (in diesem Fall s:enumItem).Attach rich: toggleControl zu Radiobuttons oder wählen Sie

Basic-Codebeispiel:

<h:selectOneRadio value="#{backingValue}"> 
    <s:enumItem enumValue="VAL_1" itemLabel="Value One" /> 
    <s:enumItem enumValue="VAL_2" itemLabel="Value Two" /> 
    <s:convertEnum /> 
</h:selectOneRadio> 

Die ideale Sache wäre, die Toggle-Steuerung an den s:enumItem s zu befestigen, so dass ich es auf einen bestimmten Zustand wechseln. Aber an dieser Stelle würde ich mich freuen, wenn der Kippschalter einfach an die h:selectOneRadio angeschlossen werden kann. Ich habe den Kippschalter als Kind der h:selectOneRadio und s:enumItem s versucht; funktioniert nicht. Ich habe auch versucht, die toggleControl um die h:selectOneRadio zu wickeln, funktioniert die Toggle-Kontrolle in diesem Fall, aber die Radio-Tasten nicht.

Antwort

0

Dies ist nicht unbedingt eine Antwort auf meine obige Frage, aber es ist eine Arbeit um, die ich für jetzt verwende, bis ich herausfinden, wie man es "besser" weiter oben macht.

Wie auch immer die Abhilfe: selectOneRadio, die die Reichen nennt: ein Onclick-Ereignis auf die h hinzufügen togglePanel der Javascript API:

onclick="TogglePanelManager.toggleOnClient('TOGGLE_PANEL_ID_HERE',null);" 

Noch würde ich die Reichen ‚richtig‘ mit tun dies: toggleControl Komponente, wenn möglich ...

1

Verknüpfen Sie Ihr Rich-TogglePanel-Objekt mit demselben Wert für Ihre Backing-Bean und verwenden Sie ein a4j-Support-Tag, um den Wert zu aktualisieren und das Panel erneut zu rendern.

Beachten Sie, dass das Attribut rich: togglePanel #value in einen String aufgelöst werden muss. Daher müssen Sie wahrscheinlich an # {backingValue.name()} binden (verwenden Sie toString() nicht). da somone später auf dich außer Kraft setzen könnte ...)

so etwas wie dies funktionieren soll:

<h:selectOneRadio id="radioButtons" value="#{backingValue}"> 
    <a4j:support event="onclick" 
       ajaxSingle="true" 
       reRender="radioButtons, togglePanel"/> 

    <s:enumItem enumValue="VAL_1" itemLabel="Value One" /> 
    <s:enumItem enumValue="VAL_2" itemLabel="Value Two" /> 
    <s:convertEnum /> 
</h:selectOneRadio> 


<rich:togglePanel id="togglePanel" 
        switchType="ajax" 
        value="#{backingValue.name()}" > 

    <f:facet name="VAL_1"> 
     <h:outputText value="Selected enum value 1"/> 
    </f:facet> 

    <f:facet name="VAL_2"> 
     <h:outputText value="Selected enum value 2"/> 
    </f:facet> 
</rich:togglePanel> 

Sie könnten mit der ajax-Unterstützung Ereignisbindung als auch spielen. Ich habe festgestellt, dass die Ereignisse "onchange" und "onselect" mit Radiobuttons bei AJAX4JSF ein wenig fleckig sein können. Ich habe dies mit Strings gemacht, wo eine Aktion in meiner Backing-Bean den Status des Toggle-Panels ändert, indem sie den Wert setzt - aber auch SOLLTE mit arbeiten.