JSF Richfaces rich:messages

G

Gast2

Gast
Hallo,

wie kann man eine rich message ausgeben wenn man auf einen Button geklickt hat?
Wenn ich einen Button betätige habe ich den FacesContext eine Message geaddet und mit rich:messages for="submit" versucht auszugeben.Der commanButton hat die id="submit" aber es wird nichts ausgegeben
 

JanHH

Top Contributor
Hast Du auch submit als clientId bei der FacesMessage angegeben? Ansonsten ist es eine globale message, die man nur mit einer globalen rich/h:messages ausgeben kann.
 

JimPanse

Bekanntes Mitglied
Hi,

du hast 2 Möglichkeiten eine Nachrichten auszugeben:

Java:
<!-- globale Nachricht -->
<h:messages global="true"/>

<h:commandButton id="submit" value="Click me" actionListener="#{myBean.submitActionEvent}" action="#{myBean.submitAction}"/>
<h:message for="submit"/>


Java:
@ManagedBean
@ViewScope
public class MyBean{

    public String submitAction(){
     //global
     addMessage(null,"myMessage",FacesMessage.SEVERITY_INFO);

     return "success";
    }
    
     public void submitActionEvent(ActionEvent arg0){
 
       //direkt an die Komponente
       addMessage(arg0.getComponent(),"myMessage",FacesMessage.SEVERITY_INFO);
    }
    
    public void addMessage(UIComponent aUIComponent, String aMessage, Severity aSeverity) {
       FacesContext context = FacesContext.getCurrentInstance();
       if(component == null){
          context.addMessage(null, new FacesMessage(aSeverity, aMessage, null));
       } else {
	context.addMessage(aUIComponent.getClientId(context), new FacesMessage(aSeverity,    aMessage, null));
	}
     }
}

Greetz
 
G

Gast2

Gast
Danke ich kenne beide Möglichkeiten, aber wenn ich 2 solche Message für 2 verschiedene Buttons habe, bekomme ich es nur hin das gar keine message ausgegeben wird oder alle beide zusammen.

Code:

[XML]
<rich:messages for="save" />
<h:commandButton value="Save"
action="#{controller.save}" id="save" />
<rich:messages for="delete" />
<h:commandButton value="Delete"
action="#{controller.delete}" id="delete" />
[/XML]

Java:
	public void save(){
		FacesContext.getCurrentInstance().addMessage("save", new FacesMessage(FacesMessage.SEVERITY_INFO, "Save", "Save"));
	}

	public void save(){
		FacesContext.getCurrentInstance().addMessage("delete", new FacesMessage(FacesMessage.SEVERITY_INFO, "Delete", "Delete"));
	}

So klappts leider nicht wird nichts ausgegeben...
 

JimPanse

Bekanntes Mitglied
Das Problem ist das du nicht die ClientId verwendest!

Komponenten Id != Client Id

"save" ist nicht die ClientId! Soweit ich weiß baut JSF die ClientId aus dem Parent container und der Komponenten Id zusammen d.h.

BSP:

Java:
<h:form id="form>

<h:commandButton id="submit" .../>

ClientId = form:submit

und damit funktioniert die Angabe "submit" nicht weil es keine Komponente dazu existiert. Schau dir die Id's im Browser Quellcode an.

Grüße
 
G

Gast2

Gast
Das Problem ist das du nicht die ClientId verwendest!

Komponenten Id != Client Id

"save" ist nicht die ClientId! Soweit ich weiß baut JSF die ClientId aus dem Parent container und der Komponenten Id zusammen d.h.

BSP:

Java:
<h:form id="form>

<h:commandButton id="submit" .../>

ClientId = form:submit

und damit funktioniert die Angabe "submit" nicht weil es keine Komponente dazu existiert. Schau dir die Id's im Browser Quellcode an.

Grüße

Ok versuch ich mal. Bei einem textfeld hat es so funktioniert, deshalb habe ich gedacht es gibt bei einem Button keinen Unterschied!!!
 

JimPanse

Bekanntes Mitglied
Danke ich kenne beide Möglichkeiten, aber wenn ich 2 solche Message für 2 verschiedene Buttons habe, bekomme ich es nur hin das gar keine message ausgegeben wird oder alle beide zusammen.

Code:

[XML]
<rich:messages for="save" />
<h:commandButton value="Save"
action="#{controller.save}" id="save" />
<rich:messages for="delete" />
<h:commandButton value="Delete"
action="#{controller.delete}" id="delete" />
[/XML]

Java:
	public void save(){
		FacesContext.getCurrentInstance().addMessage("save", new FacesMessage(FacesMessage.SEVERITY_INFO, "Save", "Save"));
	}

	public void save(){
		FacesContext.getCurrentInstance().addMessage("delete", new FacesMessage(FacesMessage.SEVERITY_INFO, "Delete", "Delete"));
	}

So klappts leider nicht wird nichts ausgegeben...

Merkwürdig das beide Methode gleich heißen???

Hier habe ich gerade mal getestet funz wunderbar:

Java:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:c="http://java.sun.com/jsp/jstl/core">
<f:view contentType="text/html">

	<!-- Define the head parameters -->
	<h:head>
		<title>My Test App</title>
		<meta name="robots" content="noindex" />
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
		<meta http-equiv="Content-Script-Type" content="text/javascript" />
		<meta http-equiv="Content-Style-Type" content="text/css" />

	</h:head>

	<!-- Define the body content  -->
	<h:body>
	<h:form id="myform">
		<h:panelGrid columns="2">
                    <h:commandButton actionListener="#{Controller.submit}" value="submit" id="submit1"/>
		    <h:message for="submit1"/>
		    <h:commandButton actionListener="#{Controller.delete}" value="delete" id="delete"/>
		    <h:message for="delete"/>
			</h:panelGrid>
		</h:form>
	</h:body>
</f:view>
</html>

Und die ManagedBean dazu

Java:
@ManagedBean(name = "Controller")
@ViewScoped
public class Controller {
	public void submit(ActionEvent arg0) {
		addMessage(arg0.getComponent(), "Submit-Error", FacesMessage.SEVERITY_ERROR);
	}

	public void delete(ActionEvent arg0) {
		addMessage(arg0.getComponent(), "Delete-Failure", FacesMessage.SEVERITY_ERROR);
	}

	public void addMessage(UIComponent aUIComponent, String aMessage, Severity aSeverity) {
		FacesContext context = FacesContext.getCurrentInstance();
		if (aUIComponent == null) {
			context.addMessage(null, new FacesMessage(aSeverity, aMessage, null));
		} else {
			context.addMessage(aUIComponent.getClientId(context), new FacesMessage(aSeverity, aMessage, null));
		}
	}


}

Greetz
 
G

Gast2

Gast
mmm und was spricht dagegen eine ActionEvent-Methode zu verwenden wenn der Anwendungsfall es bedingt????

Stärkere Kopplung des Bean an JSF und Interesse ob es auch anders geht :p...

bei mir haben die id namen immer so jdt irgendwas davor, kann man das auch beeinflussen, weil eine message jdt_5: "a" ist keine zahl sieht iwie doof aus :p
 

JimPanse

Bekanntes Mitglied
Stärkere Kopplung des Bean an JSF und Interesse ob es auch anders geht :p...

ÄÄ???? Die ManagedBean ist ein Bestandteil von JSF d.h. Kopplung ist irgendwie unsinn -> die Bean's kannst du eh in keiner anderen Anwendung verwenden.

bei mir haben die id namen immer so jdt irgendwas davor, kann man das auch beeinflussen, weil eine message jdt_5: "a" ist keine zahl sieht iwie doof aus :p

Wenn du selber keine eindeutigen Id's vergibt -> werden von JSF welche berechnet und die sehen halt 'doof' aus....

Das hat einen guten Grund warum die Id's alle eindeutig sind! In alten JSP-basierenden Anwendungen wo keine Validierung erfolgte ob eine Tag-id bereits vergeben ist hat man damit schöne Fehler produziert wenn man über die Tag-id Berechnungen vorgenommen hat (für AJAX z.B.).

Greetz
 
G

Gast2

Gast
ÄÄ???? Die ManagedBean ist ein Bestandteil von JSF d.h. Kopplung ist irgendwie unsinn -> die Bean's kannst du eh in keiner anderen Anwendung verwenden.

Ich verwende keine ManagedBean, sondern JEE6 CDI

Wenn du selber keine eindeutigen Id's vergibt -> werden von JSF welche berechnet und die sehen halt 'doof' aus....

ja ich hab aber eine id vergeben oder muss ich dem converter eine id verpassen? Mal testen...
 

JimPanse

Bekanntes Mitglied
Ich verwende keine ManagedBean, sondern JEE6 CDI

Dennoch verwendest du JSF für die View bzw. addFacesMessage-Methode d.h. spielt es in diesen Fall keine Rolle ob du nun das Komponentenmodell von CDI oder die ManagedBean-Annotation verwendest.

ja ich hab aber eine id vergeben oder muss ich dem converter eine id verpassen? Mal testen...

Ich glaube das du den Parent Container (form, panelGrid etc) keine Id vergeben hast d.h. würde ich schauen ob alle Id's vergeben hast.
 
G

Gast2

Gast
Dennoch verwendest du JSF für die View bzw. addFacesMessage-Methode d.h. spielt es in diesen Fall keine Rolle ob du nun das Komponentenmodell von CDI oder die ManagedBean-Annotation verwendest.

Ja macht schon einen Unterschied weil die Message Sachen ausgelagert sind. Naja wie gesagt anders würde ich es schöner finden. Aber schlimm ist es nicht...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T JSF/Richfaces rich:dataTable with rich:datascroller Web Tier 1
S Zugang zur List elementen (richfaces) Web Tier 1
G GWT oder RichFaces oder ... Web Tier 5
J JSF Grad der Barrierefreiheit von PrimeFaces, ICEFaces, RichFaces und OpenFaces Web Tier 2
K RichFaces CommandButton mit PopUp verwenden Web Tier 2
M RichFaces zerstörte mein Projekt Web Tier 4
D JSF RichFaces Tree-Beispiel Problem Web Tier 2
F RichFaces Override CSS Web Tier 4
T RichFaces will nicht funktionieren :( Web Tier 2
T RichFaces einbinden Web Tier 4
N JSF [Maven] Seam 2.2, Richfaces 3.3 - a4j wird nicht umgewandelt Web Tier 6
T JSF Simple Anwendung mit Richfaces Web Tier 7
S Richfaces 4.0 Ajax Waitingpanel Web Tier 2
J JSF Richfaces Tabs, dynamisches include funktioniert nicht Web Tier 4
S Richfaces: Column ReRender Web Tier 4
M JSF Richfaces 2 Kalender kombinieren Web Tier 4
K RichFaces Geschwindigkeit bei Tabellen Web Tier 3
H Richfaces - Taglib Problem gelb unterstrichen Ajax Output Web Tier 6
E JSF 2.0 Wie Richfaces in Eclipse einbinden? Web Tier 25
M Frage zur Konfiguration einer RichFaces DataTable Web Tier 4
I JSF 2.0 und RICHFACES/ ICEFACES oder ähnliches? Web Tier 6
B Probleme mit RichFaces Web Tier 2
B Richfaces 3.3.2.SR1 --- Kompatibilität Web Tier 3
N Richfaces + AjaxValidator Web Tier 3
T richfaces + jsf Web Tier 3
L [RichFaces] Applikation wird mit NullPointerException beendet Web Tier 5
W RichFaces converter in orderingList wirft exception Web Tier 5
V Image Map und Ajax-Richfaces Web Tier 5
J Richfaces combobox zeigt Items nicht an Web Tier 4
P Richfaces/Seam: RichShuttleListe funktioniert nicht Web Tier 8
N oncomplete bei Richfaces Web Tier 3
D Richfaces (Seam/Hibernate): dynamische Eingabefelder Web Tier 2
D Eventing in Kombination mit RichFaces bzw. Element.show() Web Tier 2
F Richfaces livedemo Web Tier 1
F RichFaces, Problem mit PickList Web Tier 2
T richfaces datatable Web Tier 3
C RichFaces Ajax ReRender funktioniert nicht. Web Tier 2
S richfaces Datatable horizontal ausgeben Web Tier 2
F RichFaces: JSF-Lifecycle / Validierung Web Tier 2
E RichFaces 3.2.1 Probleme Web Tier 4
F nach Update auf RichFaces 3.2.0 Fehlermeldungen Web Tier 5
R rich:datatabele : kennt Keine events ? Web Tier 1
D JSF <rich:select, "Überprüfungsfehler: Wert ist ungültig" Web Tier 10
G JSF rich:extendedDataTable in rich:panel ist gestaucht Web Tier 5
C Clientseitiger Validator in rich:calendar Web Tier 6
N rich:extendedDataTable hat eine Spalte zuviel Web Tier 4
T JSF <rich:select> Breite einstellen? Web Tier 2
I JSF Nur Strings in rich:select ? Web Tier 4
P rich:panelMenuGroup --> expanded Parameter Problem Web Tier 3
J rich:modalpanel vom java-code aus öffnen und schliessen Web Tier 2
I Rich Faces nur mit JBoss oder auch Tomcat? Web Tier 7
R JSF <rich:datatable> problem Web Tier 4
F Unterschied h:selectOneMenu zu rich:comboBox Web Tier 4
A rich:tabPanel - Inhalt nicht angezeigt Web Tier 4
F rich:modalpanel schliesst sich von selbst Web Tier 2
K JSF Custom Validation Messages Migration von JSF 1.2 auf 2.0 Web Tier 5

Ähnliche Java Themen

Neue Themen


Oben