# Eventing in Kombination mit RichFaces bzw. Element.show()



## daily (10. Mrz 2009)

Hallo zusammen,

folgendes Problem:

Ich habe ein Modal Panel in dem etwas ausgegeben werden soll. In meinem kleinen Beispiel einfach eine Fehlermeldung dass ein Login inkorrekt ist. Die Überprüfung des Logins erfolgt (natürlich) in einem Bean. Nun möchte ich aus dem Bean heraus das Modal Panel anzeigen. Ich habe hierzu ein paar Ideen, weis aber nicht ob das umsetzbar ist bzw wenn ja wie.

Erster Ansatz: Erzeugen eines eigenen Events


```
<rich:modalPanel id="panel" width="350" height="100">
  <f:facet name="header">
    <h:panelGroup>
      <h:outputText value="Modal Panel"></h:outputText>
    </h:panelGroup>
  </f:facet>
  <f:facet name="controls">
    <h:panelGroup>
      <h:graphicImage value="/images/modal/close.png"
        styleClass="hidelink" id="hidelink" />
      <rich:componentControl for="panel" attachTo="hidelink"
        operation="hide" event="onclick" />
    </h:panelGroup>
  </f:facet>
  <h:outputText
    value="This panel is called using Component Control Component"></h:outputText>
  <br />
  <h:outputText
    value="Closure link (X) works also through Component Control"></h:outputText>

  <a4j:support event="EIGENES EVENT" for="panel" operation="show" />
</rich:modalPanel>
```

Hierbei sollte die vorletzte Zeile auf ein in der Bean selbst erstelltes und gefeuertes Event reagieren und das Modal Panel zeigen. Geht das?

Zweiter Ansatz: Element.show()

In JavaScript gibt es so wie ich das gelesen habe den Element.show("panel") Befehl der mir mein Panel anzeigen sollte. Allerdings will ich eigentlich kein JavaScript verwenden und wüsste (mangels JS Erfahrung) auch garnicht wie ich diesen Script-Befehl aus der Bean ausführen könnte. Gibt es da auch was identisches an Java-Befehlen für die Bean?


Wäre für jede Hilfe dankbar.

Gruß daily


----------



## Luu (10. Mrz 2009)

> Allerdings will ich eigentlich kein JavaScript verwenden



Dann ist RichFaces mal die ganz falsche Wahl, ohne js geht ga nix 


Zu deinem konkreten Fall:

Szenario: Login Button, Klick, falsches PW, Fehlermeldung im Modal Panel ?


```
<a4j:commandButton value="Login" action="#{bean.login}">
..
<rich:modalPanel showWhenRendered="true" rendered="#{bean.panelVisible}".. />

bean.login(){
if (loginfalse)
panelVisible = true;
else
panelVisible = false;
}
```


----------



## daily (11. Mrz 2009)

Servus,

und Danke! Funktioniert soweit. Allerdings habe ich ein anderes Problem mit dieser Lösung. Hab das ganze wo anders verwendet. Einfach ein paar Elemente die gezeigt werden sollen oder eben nicht.


```
<rich:panelBar height="400" width="500" styleClass="menu_panelBar"
  headerClass="menu_panelBarItem_header" id="menu">
  <rich:panelBarItem>				
    <f:facet name="label">
     <h:panelGrid columns="3" styleClass="menu_panelGrid_header">
       <h:graphicImage value="/images/menu/home.gif" />						  
       <h:outputText value="#{msg.menu_home}" />
     </h:panelGrid>
     </f:facet>
     <h:panelGrid columns="1" id="menu_home">
       <h:panelGroup>
         <rich:spacer width="10" styleClass="menu_spacer" 
           rendered="#{menuBean.menuItemOverview}"/>
         <a4j:commandLink value="#{msg.menu_overview}"
           styleClass="link_small" action="#{menuBean.setOverviewChoosen}"
           reRender="menu_home" />
       </h:panelGroup>
       ...
```

Es geht um den Spacer in der sechstletzten Zeile. Eigentlich initialisiere ich Alle menuItem... mit False bzw. das für den Overview mit True. Also müsste nur der Overview Spacer angezeigt werden. Allerdings wird er eben NICHT angezeigt. Wobei das Value schon korrekt initialisiert wurde. Irgendwie wird also der Wert zwar schon initialisiert, aber der Spacer nicht gerendert. Hat jemand eine Idee warum oder wie ich das beheben kann? Komm da irgendwie grad nicht weiter.

P.S. Das ganze dient einfach dazu den aktuellen Menupunkt einzurücken. Und das ist am Anfang einfach der Overview.


----------

