From jira-events at lists.jboss.org Thu Mar 29 16:14:48 2012 Content-Type: multipart/mixed; boundary="===============2466506695476471749==" MIME-Version: 1.0 From: Brian Leathem (JIRA) To: richfaces-issues at lists.jboss.org Subject: [richfaces-issues] [JBoss JIRA] (RF-12063) rich:notifyMessages not displaying error from valueChangeListener Date: Thu, 29 Mar 2012 16:14:48 -0400 Message-ID: <1922261422.41502.1333052088162.JavaMail.tomcat@jira02.app.mwc.hst.phx2.redhat.com> In-Reply-To: 71281469.18246.1332180647276.JavaMail.tomcat@jira02.app.mwc.hst.phx2.redhat.com --===============2466506695476471749== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable [ https://issues.jboss.org/browse/RF-12063?page=3Dcom.atlassian.jira.pl= ugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=3D12678570#com= ment-12678570 ] = Brian Leathem edited comment on RF-12063 at 3/29/12 4:13 PM: ------------------------------------------------------------- Clicking into and out of the input should cause the value change listener t= o fire, however no message appears on the screen. Simply adding a commandButton, an= d copying the message generation code from the value change listener into an action= =3D method and clicking the button will cause a notifyMessage to appear on screen. {code} {code} {code:title=3DBean.java} @Named @ViewScoped public class Bean implements Serializable { public void testVcl(ValueChangeEvent event) { //Log.log("testVcl"); FacesMessage message =3D getFacesMessage("helloText"); message.setSeverity(FacesMessage.SEVERITY_ERROR); FacesContext.getCurrentInstance().addMessage(null, message); } public String testAction() { //Log.log("testVcl"); FacesMessage message =3D getFacesMessage("helloText"); message.setSeverity(FacesMessage.SEVERITY_ERROR); FacesContext.getCurrentInstance().addMessage(null, message); return null; } public static FacesMessage getFacesMessage(String msgKey) { FacesMessage message =3D Messages.getMessage("messages", msgKey, null); return message; } {code} {code:title=3DMessages.java} package uk.co.myproj.test; /** * * @author Brendan Healey * copied from Core JSF Geary/Horstmann p249 */ import java.text.MessageFormat; import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; import javax.faces.application.Application; import javax.faces.application.FacesMessage; import javax.faces.component.UIViewRoot; import javax.faces.context.FacesContext; public class Messages { public static FacesMessage getMessage(String bundleName, String resourc= eId, Object[] params) { FacesContext context =3D FacesContext.getCurrentInstance(); Application app =3D context.getApplication(); String appBundle =3D app.getMessageBundle(); Locale locale =3D getLocale(context); ClassLoader loader =3D getClassLoader(); String summary =3D getString(appBundle, bundleName, resourceId, locale, loader, params); if (summary =3D=3D null) { summary =3D "???" + resourceId + "???"; } String detail =3D getString(appBundle, bundleName, resourceId + "_d= etail", locale, loader, params); return new FacesMessage(summary, detail); } public static String getString(String bundle, String resourceId, Object[] params) { FacesContext context =3D FacesContext.getCurrentInstance(); Application app =3D context.getApplication(); String appBundle =3D app.getMessageBundle(); Locale locale =3D getLocale(context); ClassLoader loader =3D getClassLoader(); return getString(appBundle, bundle, resourceId, locale, loader, par= ams); } public static String getString(String bundle1, String bundle2, String resourceId, Locale locale, ClassLoader loader, Object[] params) { String resource =3D null; ResourceBundle bundle; if (bundle1 !=3D null) { bundle =3D ResourceBundle.getBundle(bundle1, locale, loader); if (bundle !=3D null) { try { resource =3D bundle.getString(resourceId); } catch (MissingResourceException ex) { } } } if (resource =3D=3D null) { bundle =3D ResourceBundle.getBundle(bundle2, locale, loader); if (bundle !=3D null) { try { resource =3D bundle.getString(resourceId); } catch (MissingResourceException ex) { } } } if (resource =3D=3D null) { return null; // no match } if (params =3D=3D null) { return resource; } MessageFormat formatter =3D new MessageFormat(resource, locale); return formatter.format(params); } public static Locale getLocale(FacesContext context) { Locale locale =3D null; UIViewRoot viewRoot =3D context.getViewRoot(); if (viewRoot !=3D null) { locale =3D viewRoot.getLocale(); } if (locale =3D=3D null) { locale =3D Locale.getDefault(); } return locale; } public static ClassLoader getClassLoader() { ClassLoader loader =3D Thread.currentThread().getContextClassLoader= (); if (loader =3D=3D null) { loader =3D ClassLoader.getSystemClassLoader(); } return loader; } } {code} = was (Author: healeyb): Clicking into and out of the input should cause the value change listen= er to fire, however no message appears on the screen. Simply adding a commandButton, an= d copying the message generation code from the value change listener into an action= =3D method and clicking the button will cause a notifyMessage to appear on screen. Bean.java --------- @Named @ViewScoped public class Bean implements Serializable { public void testVcl(ValueChangeEvent event) { //Log.log("testVcl"); FacesMessage message =3D getFacesMessage("helloText"); message.setSeverity(FacesMessage.SEVERITY_ERROR); FacesContext.getCurrentInstance().addMessage(null, message); } public String testAction() { //Log.log("testVcl"); FacesMessage message =3D getFacesMessage("helloText"); message.setSeverity(FacesMessage.SEVERITY_ERROR); FacesContext.getCurrentInstance().addMessage(null, message); return null; } public static FacesMessage getFacesMessage(String msgKey) { FacesMessage message =3D Messages.getMessage("messages", msgKey, null); return message; } Messages.java ------------- package uk.co.myproj.test; /** * * @author Brendan Healey * copied from Core JSF Geary/Horstmann p249 */ import java.text.MessageFormat; import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; import javax.faces.application.Application; import javax.faces.application.FacesMessage; import javax.faces.component.UIViewRoot; import javax.faces.context.FacesContext; public class Messages { public static FacesMessage getMessage(String bundleName, String resourc= eId, Object[] params) { FacesContext context =3D FacesContext.getCurrentInstance(); Application app =3D context.getApplication(); String appBundle =3D app.getMessageBundle(); Locale locale =3D getLocale(context); ClassLoader loader =3D getClassLoader(); String summary =3D getString(appBundle, bundleName, resourceId, locale, loader, params); if (summary =3D=3D null) { summary =3D "???" + resourceId + "???"; } String detail =3D getString(appBundle, bundleName, resourceId + "_d= etail", locale, loader, params); return new FacesMessage(summary, detail); } public static String getString(String bundle, String resourceId, Object[] params) { FacesContext context =3D FacesContext.getCurrentInstance(); Application app =3D context.getApplication(); String appBundle =3D app.getMessageBundle(); Locale locale =3D getLocale(context); ClassLoader loader =3D getClassLoader(); return getString(appBundle, bundle, resourceId, locale, loader, par= ams); } public static String getString(String bundle1, String bundle2, String resourceId, Locale locale, ClassLoader loader, Object[] params) { String resource =3D null; ResourceBundle bundle; if (bundle1 !=3D null) { bundle =3D ResourceBundle.getBundle(bundle1, locale, loader); if (bundle !=3D null) { try { resource =3D bundle.getString(resourceId); } catch (MissingResourceException ex) { } } } if (resource =3D=3D null) { bundle =3D ResourceBundle.getBundle(bundle2, locale, loader); if (bundle !=3D null) { try { resource =3D bundle.getString(resourceId); } catch (MissingResourceException ex) { } } } if (resource =3D=3D null) { return null; // no match } if (params =3D=3D null) { return resource; } MessageFormat formatter =3D new MessageFormat(resource, locale); return formatter.format(params); } public static Locale getLocale(FacesContext context) { Locale locale =3D null; UIViewRoot viewRoot =3D context.getViewRoot(); if (viewRoot !=3D null) { locale =3D viewRoot.getLocale(); } if (locale =3D=3D null) { locale =3D Locale.getDefault(); } return locale; } public static ClassLoader getClassLoader() { ClassLoader loader =3D Thread.currentThread().getContextClassLoader= (); if (loader =3D=3D null) { loader =3D ClassLoader.getSystemClassLoader(); } return loader; } } = > rich:notifyMessages not displaying error from valueChangeListener > ----------------------------------------------------------------- > > Key: RF-12063 > URL: https://issues.jboss.org/browse/RF-12063 > Project: RichFaces > Issue Type: Feature Request > Security Level: Public(Everyone can see) = > Components: component-output > Affects Versions: 4.2.0.Final > Environment: Mojarra 2.1.7, RF 4.2.0.Final, Windows 7, Glassfish = 3.1.2, Chrome browser. > Reporter: Brendan Healey > > I have a global notifyMessages in a template . > I log a global error in the usual way from a value change listener (proce= ss validations > phase): > FacesMessage message =3D getFacesMessage(errKey); > message.setSeverity(FacesMessage.SEVERITY_ERROR); > FacesContext.getCurrentInstance().addMessage(null, message); > but the error never appears. If I have an h:messages on the page which is= ajax > rendered the message appears ok. > Regards, > Brendan. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrato= rs: https://issues.jboss.org/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira =20 --===============2466506695476471749==--