[JSF] bedingte Ausgabe

Status
Nicht offen für weitere Antworten.

JasonV

Aktives Mitglied
Moin ;-)

Also, bin noch recht frisch im JSF-Thema drin. Ich stehe nun vor einem kleineren Problemchen:

Ich habe eine Seite, auf der man einen Text eintragen kann (dahinter eine request scoped bean). Nach dem Submit soll im Erfolgsfall ein Text angezeigt werden. Wie kann ich das verwirklichen?

Eigentlich sollte die Bean nicht zu einer Session-Bean werden. Oder bietet sich das hier an, weil ich eigentlich im Erfolgsfall auch noch den Empfänger ausgeben wollte. Allerdings kann man mit der Applikation viele Nachrichten hintereinander versenden, also müsste ich die Bean ja nach jeder Aktion "leeren" (in der action-Methode wohl) und dort eine Historie pflegen. Aber gibt es auch einen anderen Weg?


Gruß und Danke für Ideen,
jasonv
 

mmeyer1987

Mitglied
Moin,

Noch einer aus dem Norden?! :toll:


Für das bedingte Anzeigen von Text hast du mehrere Möglichkeiten, spontan fallen mir zwei ein:

  1. Eine Messages-Komponente, der du eine Message anhängst. Dieses kannst du in der durch das Submit aufgerufenen Action machen.

  • Du legst dir einen Outputtext mit der Nachricht auf die Seite, und setzt das rendered-Attribut auf false. Nach (dem von dir definiertem) erfolgreichem Ausführen der Action setzt du es noch auf true, dann würde der Text beim nächsten Rendern erscheinen.

Vom Session Scope würde ich persönlich dir in diesem Fall auch abraten, da du sonst wie du selbst sagst, dafür sorgen müsstest, wann du welche Daten wieder nullst usw.


Hoffe, das war etwas verständlich? Bin selbst noch nicht so ewig lang in der Thematik. :rtfm: :)


Gruß, Manuel
 
Zuletzt bearbeitet:

JasonV

Aktives Mitglied
Noch einer aus dem Norden?! :toll:
Ne, Ruhrgebiet - aber ich nutze das hier um mich abzugrenzen von den ganzen Muffeln ;)

  1. Eine Messages-Komponente, der du eine Message anhängst. Dieses kannst du in der durch das Submit aufgerufenen Action machen.

  • Du legst dir einen Outputtext mit der Nachricht auf die Seite, und setzt das rendered-Attribut auf false. Nach (dem von dir definiertem) erfolgreichem Ausführen der Action setzt du es noch auf true, dann würde der Text beim nächsten Rendern erscheinen.
Bei Methode 1 verstehe ich nicht, wie das laufen soll. Könntest Du mir das verdeutlichen?

Punkt 2 habe ich über die Session-Bean gemacht (momentan, damit ich den Text überhaupt mal sehe), also meine request scoped zu session scoped. Da habe ich dann das rendered-Attribut benutzt und habe nach erfolgreichem Versand eine boolean und den alten Empfänger als getter integriert.


Gruß,
Carsten
 

mmeyer1987

Mitglied
Hi,

hier zu Methode 1:

Auf der jsp-Seite habe ich mir ein Hidden-Input-Textfeld angelegt, siehe hier:
Code:
<h:inputHidden id="inpHidden" value="null"></h:inputHidden>

Gleich dazu eine Message-Komponente, die für das Textfeld da ist:

Code:
<h:message for="inpHidden"></h:message>

Das Hidden-Inputfeld ist also nur Halter für eine Message-Komponente. Ich habe mehrere Stellen, an denen ich Messages haben will, deswegen.

Für das Hidden-Input-Feld hast du im Pagecode nun auch den Getter:


[HIGHLIGHT="Java"]protected HtmlInputHidden getInpHidden() {
if (inpHidden== null) {
inpHidden= (HtmlInputHidden) findComponentInRoot("inpHidden");
}
return inpHidden;
}[/HIGHLIGHT]


In der Java-Action könntest du folgendes machen:

[HIGHLIGHT="Java"]
public String doAction() {
// Hier deine Verarbeitungen machen.

if(meineAktionenWarenErfolgreich){
// Hier Message anlegen
FacesMessage mess = new FacesMessage(FacesMessage.SEVERITY_INFO,"Meine Summary-Nachricht", "Meine Detail-Nachricht");
// Message an Komponente hängen
FacesContext.getCurrentInstance().addMessage(getInpHidden().getClientId(FacesContext.getCurrentInstance()), mess);
}
}[/HIGHLIGHT]


Wird dir das deutlich?

Grüße!
 
M

maki

Gast
Methode 2 (das rendered Attribut) ist besser & der Standard Weg für so ein verhalten, zusammen mit der EL kann man da sehr viel machen ;)
 

mmeyer1987

Mitglied
Methode 2 (das rendered Attribut) ist besser & der Standard Weg für so ein verhalten, zusammen mit der EL kann man da sehr viel machen ;)

Moin,

Das rendered Attribut im Zusammenhang mit EL nutze ich zur bedingten Anzeige von Komponenten bzw. kompletten Teilbereichen meiner Seiten. Aber wieso für Messages? Für mich sind diese Messages request-scoped, sprich, beim nächsten Request will ich nicht selber gucken müssen, das die wieder auf false gesetzt werden.

Oder wo ist mein Denkfehler? ???:L

Gruß
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben